Adventar をローカルで開発する
Adventarを支える技術 Advent Calendar 2019 の2日目です。
Adventar はオープンソースでコードを公開しているので、誰でも環境を再現することができます。ただ、システムがそこそこ複雑で、ドキュメントなども全然書いていないので、たぶんリポジトリを見ても起動する方法がわからないと思うので、自分用のメモも兼ねて Adventar をローカルで起動して開発する方法をここに記しておきます。
まずソースコードを手元に持ってきます。
$ git clone https://github.com/adventar/adventar $ cd adventar
$ tree -L 1 . ├── README.md ├── api-server # API server ├── batch # スケジュール実行されるバッチジョブ ├── db # database のスキーマ ├── frontend # Nuxt.js によるフロントエンド(SSRのコード含む) ├── image-server # 画像サーバー ├── protobuf # protocol buffers の定義 └── terraform # インフラ構成のコード
batch
, image-server
, terraform
, protobuf
あたりはローカルで起動するのには使わないので今回は気にしないでください。
まず認証で使っている Firebase Authentication に必要な Credentials を作る必要があります。これがなくても起動はできますが、ログインができないのでカレンダーの作成や登録ができなくて、実質なにもできません。
Firebase Consoleで新規プロジェクトを作り、Googleログインに設定を有効にします。
次にサービスアカウントの設定から秘密鍵の生成を実行します。
そうするとJSONファイルがダウンロードされるので、これをAPIサーバーの起動時に環境変数に設定します。
$ export FIREBASE_CREDENTIAL_JSON=$(cat ~/Downloads/adventar-test-firebase-adminsdk-xxx.json) $ cd api-server $ docker-compose up
これでAPIサーバーは起動するはずです。環境変数の設定は毎回やるのは面倒なら direnv や envchain などを使うといいと思います。僕は envchain を使っています。
これだけだとまだ DB に table ができていないのでスキーマを流します。
$ cd adventar/db $ mysql -u root -h 127.0.0.1 --port 13306 adventar_dev < schema.sql
最後にフロントエンドのサーバーを起動します。フロントエンドのサーバーにも Firebase の環境変数をいくつか設定する必要があります。
$ export FIREBASE_API_KEY=xxx $ export FIREBASE_PROJECT_ID=your-project-name $ export FIREBASE_AUTH_DOMAIN=your-project-name.firebaseapp.com $ cd adventar/frontend $ yarn install $ yarn dev
FIREBASE_PROJECT_ID
は先程ダウンロードした JSON に記述されているproject_id
です。
$ cat ~/Downloads/adventar-test-firebase-adminsdk-xxx.json | jq .project_id
などで確認できると思います。FIREBASE_AUTH_DOMAIN
は project id に.firebaseapp.com
を付け足したもの、FIREBASE_API_KEY
はFirebaseの設定画面から確認できるはずです。
これで http://localhost:3333/ をブラウザで開いてログイン、カレンダーの作成などができるはずです。
明日は Firebase Authentication についてもう少し詳しく書こうと思います。