ラズパイで作る自宅WEBサーバ:nginx編
第10回 アプリ作成
2026.11.03
以前、Androidスマホ用に作成した英語学習アプリを、nginx WEBサーバ上で動作するアプリとして移植してみたので、
その仕様をざっくりとご紹介します。
●繭単とは
繭単は、単語カードの電子版です。
単語カードの表に英文、裏面に日本語訳が書かれているようなもので、英文をタップすると日本語訳、
あるいはモードを変えて、日本語タップで英語を表示、また、英語・日本語の同時表示も可能になっています。
●仕様
主要な画面遷移はPHPにより行い、クライアント側アプリ内へのデータ・ダウンロードはNode.jsを介してJavaScriptにより行います。

公開ディレクトリには窓口となる最小限のスクリプトファイルを置き、
そのスクリプトから非公開領域のスクリプト本体を呼び出しています。
公開領域のスクリプトは下記のようになります。
設定ミスでコードが露出することがあっても非公開領域のコードは表示されません。
$ cat /example/www/index.php
<?php
require_once('/example/program/mayutan.php'); // ←スクリプト本体
////////////////////////////////////////////
// スクリプト本体を操作する最小限のコード //
////////////////////////////////////////////
?>
$ cat /example/www/index.js
const http = require("http");
const mayutan = require('/example/js/mayutan.js');
const server = http.createServer((req, res) => {
mayutan.download(req,res,config);
});
server.listen(3000);

ユーザはログイン画面でユーザIDとパスワードを入力・送信します。
サーバ側では受信したアカウント情報をデータベースに照会し、該当アカウントがあれば
セッションIDを生成してデータベースに登録、ユーザのブラウザに対してメニュー画面とセッションIDを返します。

ユーザがメニュー画面からカテゴリを選択すると、カテゴリIDとセッションIDをサーバに送信します。
サーバ側ではセッションIDを照合、セッションIDを更新するとともに、サブメニュー画面と更新されたセッションIDをブラウザに返します。

サブメニューからコンテンツを選択すると、コンテンツIDとセッションIDがNode.jsにリバースプロキシされ、サーバサイドのJavascriptが実行されます。
JavascriptはデータベースにセッションIDを照会し、符合すればコンテンツデータをブラウザ側で実行されているJavascriptに受け渡します。
●MariaDBに接続する
書籍にはプロジェクトディレクトリにパッケージをインストールするという記載がありますが、
MariaDB接続用パッケージは、index.jsのあるディレクトリではなく、
index.jsから呼び出されるスクリプト本体のあるディレクトリにインストールします
$ cd /example/js
$ sudo npm install mariadb
added 8 packages, and audited 37 packages in 11s
6 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
$ cat /example/js/package.json
{
"dependencies": {
"mariadb": "^3.5.3"
}
}
package.json が作成され、MariaDBに接続するためのパッケージが追加されています
●備考:JSONファイルの構文チェック
クライアント側にダウンロードされる英単語データはJSON形式です。
構文チェックには jq コマンドが便利です。
$ jq . ***.json
|
KEYESTUDIO Micro:bit V2ロボットスターターキット (マイクロビットなし) MakecodeとPython用
動き、光と音の使い方、障害物の検知と回避方法、線をたどり、IRリモコンとアプリでコントロールする方法を学びます。
Maqueen Lite V5 micro:bit ロボットキット STEM用(ライントレース&障害物回避)
Maqueen Lite V5 STEMロボットは、事前調整済みのライントレースアルゴリズム、耐衝撃モーター、開封即使用可能な設計で、ストレスを解消します。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|