TermuxでFirebaseのFunctionsをNodeで動かす 結城永人 -2024年5月31日 FirebaseのバックエンドサービスのFunctionsをAndroidでLinux環境を構築できるターミナルエミュレーターアプリのTermuxからNode(JavaScript/TypeScript)で使おうと思ったらエラーを連発してデプロイできなかった。何とかならないのかと調べてみたらGitHubで提供されるモジュールのfirebase-functions-termuxを使うとオリジナルのFunctionsの代わりになることが分かった。 五年前から更新が止まっていて本当に大丈夫かどうかが半信半疑だったけれどもやってみるとFunctionsのタイプは第一世代で古いものの動かせることが分かったから見付けた使い方を載せておきたい。 firebase-functions-termuxの設定 firebase-functions-termuxはNodeのExpressというフレームワークで Functionsの第一世代を使えるようにするモジュールなんだ。 設定する手順はGitHubのREADMEに載っている通りで、FirebaseのFunctionsをHostingと組み合わせて使う。 単独でも使えるのかも知れないけれども拡張性が増して便利だと思う。 FirebaseのHostingをTermuxに取り込むfirebase-functions-termuxをTermuxに取り込むHostingのfirebase.jsonを書き換える 作者の説明に従うとFirebaseのHostingをTermuxに取り込んでからfirebase-functions-termuxを取り込んでオリジナルのFunctionsの代わりとして使えるように組み合わせるべく、Hostingのルートディレクトリのfirebase.jsonを書き換えるという作業が必要になる。 FirebaseのHostingをTermuxに取り込む 以前、FirebaseのHostingの設定についてはブログに載せたけど、その通りにやれば今でも大丈夫だ。 Firebaseのホスティングのプロジェクト/アプリ開発やサイト作成を立ち上げる Functionsの昔と変わった最も大きな点は昨年からNodeだけではなく、Pythonにも対応するようになったことだ。AndroidのTermuxのNodeでエラーを連発してどうにもならないからPythonならば大丈夫なのかと調べてみたら、現在、Pythonのバージョンが12でなくてはFunctionsが動かないらしくてTermuxにインストールすると11で、そのせいか、やはりエラーを連発してどうにもならない。 結局、TermuxでFunctionsを使うにはfirebase-functions-termuxを入れてNodeのExpressで動かすのが唯一か手軽な方法だと思う。 FunctionsのためにHostingを取り込む際の注意点としてはTermuxのホーム(アプリを開いた直後の階層)にディレクトリを作ることが挙げられる。 どうしてかというとNodeのnpmのインストールが下の階層だと難しい場合があるので、ホームからやらないと必要なモジュールが集まらなくて結果的にFunctionsがデプロイできるとしても目的を果たせないことになり兼ねない。 Bash mkdir firebase ※firebaseは任意のディレクトリ名。 Termuxのホームにmkdirコマンドでディレクトリを作ると普通のファイルマネージャーやHTMLエディターでは開けないんだ。 Linux環境からエディターをインストールしてコマンドで開くか高機能のファイルマネージャーやHTMLエディターからアクセスできるようにする必要がある。 個人的にAcodeというAndroidのHTMLエディターを使ってTermuxのホームからNodeやPythonのファイルを編集している。 関連ページAndroidの無料で使い易いHTMLエディターの比較検討 firebase-functions-termuxをTermuxに取り込む firebase-functions-termuxはGitHubのリポジトリにあるので、GitHubに登録してTermuxにGitHubのGitを入れておくと簡単だ。 これも、以前、ブログに載せたけど、同じようにやれば今でも大丈夫だ。 GitHubのGitのAndroidスマホのTermuxアプリを使った初期設定と通常の基本操作 現在、FirebaseのHostingがGitHubと連携できてデプロイの自動化も可能になっているので、GitHubを常用する人には便利だと思う。 FirebaseのHostingのディレクトリの中にFunctionsの代わりとなるfirebase-functions-termuxを入れる。 Bash cd firebase ※firebaseは任意のディレクトリ名。 Hostingのために作成したルートディレクトリ、サンプルでは「firebase」へcdコマンドで移動する。 Bash git clone https://github.com/somitrasr/firebase-functions-termux.git firebase-functions-termuxをGitHubのリポジトリからcloneコマンドで取り込む。 Gitを使わない場合はfirebase-functions-termuxの内容をダウンロードして入れる。 Linuxのコマンドてダウンロードする方法はTermuxでcurl -OL ファイルのURL(ファイルはraw:コード以外が含まれないものを選ばないと編集が必要)が使えるけど、ただしfirebase-functions-termuxには大きなフォルダもあってそこから数多くのファイルをダウンロードしてmkdir ディレクトリ名で必要なディレクトリを作って入れて行くのは物凄く大変な作業になる。 firebase-functions-termuxのルートのディレクトリ名の「firebase-functions-termux」は別のものに書き換えても構わない。 Hostingのfirebase.jsonを書き換える ここまでで新しいディレクトリの同じ階層にHostingとfirebase-functions-termuxが入っていることになる。 Hostingの動作を決めるためのfirebase.jsonというファイルがあるので、普通にFunctionsを使うときと同様にrewritesを追加してHostingと関連付ける。 firebase.jsonのサンプル { "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [ { "source": "**", "function": { "functionId": "app" } } ] } } firebase.jsonのrewritesの書き方は次のドキュメントが参考になる。 ホスティング動作を構成するCloud Functions を使用した動的コンテンツの配信とマイクロサービスのホスティング関数を管理する firebase.jsonのrewritesの書き方 rewritesはhostingの項目として記載する。hostingと併置しないように注意する。 rewritesはHostingで同じコンテンツを別のURLでも出せるようにするかFunctionsの呼び出しのために使える。 firebase-functions-termuxの設定では次の二つを追加する。 source関数の呼び出しページ(全てならば「**」)functionfunctionIdアプリ名(初期値は「app」) sourceはHostingからFunctionsへHTTPリクエストを送るページを限定する。外部サイトからFunctionsを呼び出す際には影響しないだろう。 functionのfunctionIdはFunctionsで定義したもので、firebase-functions-termuxの初期値ではindex.jsにある「app」が対象になる。 firebase-functions-termux/index.js const functions = require('firebase-functions'); const express = require('express'); const app=express(); app.get('/users', (request, response)=>{ response.send("Hi Somitrasr"); }); exports.app = functions.https.onRequest(app); 他にも「app」という同じ表記の変数があるから紛らわしいけれども最後の出力の「expors.app」のappだけが関数名になる。 Hostingのfirebase.jsonのFunctionsの呼び出しに関する項目はその他に配信元を地域を指定するregionとHostingとの同期を指定するpinTagがある。 前者はfirebase-functions-termuxの第一世代では対象が限定的だから注意して使う。因みに日本の「asia-northeast1」(東京)や「asia-northeast2」(大阪)を指定しても使えないと思う。後者は第二世代だからfirebase-functions-termuxでは全く使えなくてむしろエラーを引き起こすから記載しては行けない。 firebase.jsonの書き換えが済んだらfirebase-functions-termuxの初期設定は完了した。 Bash firebase deploy 一度、新しく作成したFirebaseのルートディレクトリからHostingとFunctionsをデプロイして成功すれば間違いないと確認できる。 Nodeのバージョンの指定 FirebaseのFunctionsのNodeのバージョンを合わせないとエラーが出てしまう場合がある。 現段階では第二世代も第一世代も14、16、18、20(プレビュー)がサポートされている(Node.js のバージョンを設定)。 Nodeのバージョンはどこで指定するか Functionsのpackage.jsonでNodeのバージョンを指定することができる。 firebase-functions-termuxのpackage.json "engines": { "node": "8” firebase-functions-termuxの初期値が「8」なので、必要に応じて変更する。 ただしFunctionsでNodeの10以降のバージョンを使うのは無料プランでは無理で、無料枠を越えると課金されるBlazeプランへ移行しなくてはならない。 参考サイト料金プラン Functionsで使用するNodeのバージョンをTermuxにインストールしたものと合わせないと止まることはないかも知れないけど、しかし何かの実行中に注意を呼びかけられるのを良く見かけるから合わせる方が無難だろう。 Termuxでは通常のNode.jsと安定版のNode.js LTSをインストールすることができる(Node.js)。 Bash node -v Nodeは通常版が安定版よりもバージョンが進んでいるので、Termuxにもう入っていれば-vコマンドで調べてFunctionsでサポートするものと合った方を使うことが望ましい。 FunctionsでのNodeのExpress firebase-functions-termuxにはNodeのフレームワークのExpressが搭載されている。 NodeのExpressをFunctionsに適用する Functionsでは独自のHTTP関数があるけれどもそれをExpressで置き換えるには次のプログラムが必須になる。 Node.js const functions = require('firebase-functions'); const express = require('express'); const app = express(); // Expressのプログラム内容 exports.app = functions.https.onRequest(app); firebase-functions-termuxのindex.jsにも含まれているけれども最初と最後をconst functions = require('firebase-functions') とexports.app = functions.https.onRequest(app)(三つの「app」は任意で、一つ目と三つ目がExpressの変数、二つ目が関数名)にしておけばその中で通常のExpressのプログラムを書いてFunctionsに反映させられる。 参考サイトウェブ フレームワークを使用する コメント 新しい投稿 前の投稿
エドガー・アラン・ポーの黒猫の原文と注解 アメリカの英語の小説、 エドガー・アラン・ポーの 黒猫 を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC730点くらいを越える...
ナサニエル・ホーソーンの若いグッドマン・ブラウンの原文と注解 アメリカの英語の小説、 ナサニエル・ホーソーンの 若いグッドマン・ブラウン を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC7...
ナサニエル・ホーソーンの若いグッドマン・ブラウンの日本語訳 十九世紀のアメリカの作家、小説家の ナサニエル・ホーソーン の小説の 若いグッドマン・ブラウン (1835)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる。 ...
三浦春馬のたぶん本当の死因 三浦春馬は自殺した。その後、 芦名星と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではないと...
アドセンスの個人のアメリカの税務情報/W-8BEN納税フォームの書き方 アドセンスに利用者の税務情報が必要となり、2021年6月1日以降、YouTubeのサイト広告などで収益を得る場合には税務情報を提出しないとアドセンスの支払いからアメリカの源泉所得税が米国内国歳入法の第三章により、控除される。 Google は、YouTube パートナー プロ...
芦名星のたぶん本当の死因 芦名星は自殺した。その前後、 三浦春馬と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではない...
苫米地英人のマインドフルネスに役立つ機能音源 認知科学者の 苫米地英人のコーチング を自己流で始めてさらに良いかも知れないと新しく始めたのが機能音源なんだ。聴くと周波数などの仕組みで脳に影響を与えて様々な効果を発揮するために作られているといわれる。調べるとCDの数十枚のセットで何万円もするので、驚かされるけれども教材として売...
ヘンリー・ローソンの家畜追いの妻の日本語訳 十九から二十世紀のオーストラリアの作家、詩人で小説家の ヘンリー・ローソン の小説の 家畜追いの妻 (1892)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる...
ヘンリー・ローソンの家畜追いの妻の原文と注解 オーストラリアの英語の小説、 ヘンリー・ローソンの 家畜追いの妻 を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC730点...
佐藤義則のヨシボールの握り方や投げ方 佐藤義則の基本情報 佐藤義則/阪急ブレーブス| フジテレビ 1954年9月11日生まれ、北海道奥尻郡奥尻町出身、函館有斗高等学校を進学して1977年に日本大学からドラフト一位で阪急ブレーブス(1989年からオリックスブレーブス、1991年からオリックスブルーウェーブ)に入...
コメント