dartdocでAPIドキュメントを作成する
Dartで書かれたプロジェクトであれば、 dartdoc
でドキュメントが自動生成できます。
$ dartdoc
自分が作りたかった理由はPluginのscoreを上げたかったからなのですが、ローカルで試すに当たり、Dart自体の、Pluginには不要なドキュメントが生成されてしまいました。
なのでそれを除外するコマンドが次です。
$ dartdoc --exclude 'dart:async,dart:collection,dart:convert,dart:core,dart:developer,dart:io,dart:isolate,dart:math,dart:typed_data,dart:ui,dart:ffi,dart:html,dart:js,dart:js_util'
まだ泥臭い指定をしなければ一緒に生成されてしまうみたいです。
確認したバージョンは次のとおりです。
$ dartdoc --version dartdoc version: 0.29.1
今開発中のバージョンが 0.30.1
まで出てますが、関連した修正は無さそうです。気軽に対象のディレクトリが指定できる形だと楽な気がしますね。
参考
dartdoc command should not generates docs for dart-sdk · Issue #1949 · dart-lang/dartdoc · GitHub
2019年を振り返って
目標とか
ジム通い
1月から通い始めていたのですが、目標週2ペースで行きたかったのですが、結果的には週1ペースでした。
体調崩したり旅行に行っていたことを考えると、継続できていたのかなと思います。
競プロ
AtCoderを取り組んでたのですが、継続できませんでした。正直数えるほどしかできてないのですが、毎回Dが解けなかったです。そこでアルゴリズムの勉強をしないと先に進めないなと思い、その段階で止まってしまいました。
OKR
個人OKRを立てて取り組めていた時期は調子が良かったです。しかし業務に忙殺されてから調子が狂い、リズムを取り戻せませんでした。
やったこと
気付ける仕組みとか会社でも使えるBotとか作った
リリースしてから一定期間が経過したら教えてくれるやつ
Slackのユーザグループから一人を選択してくれるBot
SlackからGoogle Calendarの予定をシュッと見れるBot
それぞれGitLabのPipeline schedulesで動かしたり、Cloud Functionsで動かしたり、Cloud Runで動かしたりして遊んでます。
Flutter
2019年はFlutterに触れました。
技術調査を兼ねてFlutter on the webを試してみたり、いくつかPluginを公開したりしました。
Flutterでネイティブ広告を表示するためのPlugin
Flutter/DartのPluginをシュッと公開するためのGitHub Actions
Contribute
大なり小なりはあるのですが、最近だとFirebase Admin Java SDKに名前が乗ったのは嬉しかったです。
環境を作るのがちょっと面倒だった(Firebaseのプロジェクトが必要だったり)ので、あまりContributeされてないのかもしれません。
技術書典8
今年も参加しました。隔会で参加してます。
GoogleがFitbitを買収したのでこれから人気になるかもしれません。
こちらからお求めになれます。
正直なところ、現状Fitbitで利用している技術とGoogleのモバイル周りが全然マッチしていないのでどうするんだろうという感じです。
FitbitはJerryScriptをベースにしたFitbit OSで動かしているので、それを捨てるとなると現状作ってきたエコシステムを捨てることになるのであんまりそうはしないだろうなと思っているのですが(Versa 2を出したばっか)。なのでAndroid以外の何かを乗っけてくるのかもしれません。例えばFuchsiaとか乗っけてきたりして。
登壇
Flutter Meetup Tokyo で何回かLTをしました。
www.slideshare.net
www.slideshare.net
趣味とかその他
生活を豊かにすることにハマってきた
悪く言えば浪費なのですが、家電とか買いました。
- ドラム式乾燥洗濯機
- コードレス掃除機
- スマートロック
- スマートホームディスプレイ
- スマートライト
- 電動コーヒーミル
- アメリカンプレス
- Nintendo Switch
生活が豊かになるのは楽しいです。家にいる時間が長い人ほど家に対してはお金をかけた方が良いです。
海外旅行
2週間ほどでタイとベトナムに行きました。
タイのバンコクは思った以上に栄えていました。一部は東京以上に都会で、一部は田舎以上に廃れてて差が激しかったです。昨日行った場所で爆発があったりして若干ヒヤリとした場面もありました。
ベトナムはハノイを拠点にしたのですが、バンゾックの滝(徳天瀑布)を見に行くために片道12時間の移動をしたのは良い経験でした。また、現地のツアー会社で申し込んでハロン湾のクルージングにも行きました。全部英語だったので苦戦しました。
ボドゲ
今年も色々買いました。遊びたい人いたら言ってください。
- Welcome To
- Welcome To拡張
- パッチワーク
- スコットランドヤード東京
- 横濱紳商伝
- カタン航海者版
- はぁって言うゲーム
- 遙かなる喜望峰
- 翡翠の商人
- BOXWALK
- ソレニア
- イト
- マジックメイズ
- ディセプション
- デクリプト
- アルゴ
- 花火
- モダンアート
そろそろ自分でも作りたい。
体調崩した
虚血性腸炎というものに2回なりました。腸は昔から強くはないのですが、今後はもっと気を使った何かをしたほうがいいかもしれません。
2020年
英語
OSSのissueのやりとりとか、英語のドキュメントを読むとか、海外旅行とかで英語の必要性が自分の中で再び高まってきました。
何かをしたいときにその障害になることが英語であるのならば、解決できる障害なので今のうちにやっつけてしまおうと決意しました。
英語やるだけだとふわっとしてるので、英語でのアウトプットが何かしら出せるとこまでいけたらなと思います。
リングフィットアドベンチャー
来月から通勤ルートからジムがなくなってしまうので、ジムに行きにくくなります。その代わりにリングフィットアドベンチャーを年末からはじめました。
今の所継続できており、適度に筋肉痛も発生しているので、ジムから乗り換えようと思ってます。
Flutter
もっとFlutterのアウトプットをしていきたいし、コミュニティにも関わっていきたいと思ってます。
自分はWebの知識が弱いのですが、そのあたりも補えるあたりFlutterには嬉しさがあります。
Flutter for WebのプロジェクトをGitHub ActionsでFirebase Hostingにデプロイする
タイトルのまんまです。
FlutterとFirebaseのバージョンは次のとおりです。
$ flutter --version Flutter 1.10.14 • channel dev • https://github.com/flutter/flutter.git Framework • revision 1946fc4da0 (12 days ago) • 2019-10-07 15:23:31 -0700 Engine • revision 1d62160fdb Tools • Dart 2.6.0 (build 2.6.0-dev.1.0 d6c6d12ebf) $ firebase --version 7.0.1
Workflow
次のワークフローで基本的には動きます。ただし、一部実装依存の部分があるので後述します。
- .github/workflow/main.yml
name: CI on: push: branches: - master jobs: build: name: Build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v1 - name: Build uses: subosito/flutter-action@v1 with: channel: 'dev' - run: | flutter config --enable-web flutter pub get cat <<EOF > assets/secret.json ${{ secrets.CREDENTIAL_JSON }} EOF flutter build web - name: Archive Production Artifact uses: actions/upload-artifact@master with: name: web path: build/web deploy: name: Deploy needs: build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v1 - name: Download Artifact uses: actions/download-artifact@master with: name: web path: build/web - name: Deploy to Firebase uses: w9jds/firebase-action@master with: args: deploy --only hosting env: PROJECT_ID: ${{ secrets.PROJECT_ID }} FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
解説していきます。
Jobの流れ
BuildとDeployで分けてます。
Build
flutterコマンドを落としてきて、ビルドしたものをartifactに登録します。
GitHub Actionsでflutterを使うためのActionがいくつか用意されていたのですが、Dockerの方を使うとartifactのpathを調整する必要があったため、JavaScriptの方を選択しました。
Deploy
firebaseコマンドが使えるDockerコンテナを用意し、その中でartifactを落としてきて、Hostingにデプロイします。
こちらもActionが複数あったのですが、最もStarを集めてて使いやすそうなものを選びました。
Hosting以外のFirebaseの機能を利用している場合
今回の例にあたります。Firebase Config Objectを生成して、Firebase初期化時の引数に渡す必要があります。
この情報はpublicにしたくないものも含まれれるため、リポジトリには含めません。
今回のケースだと、 assets/secret.json
というファイルに情報を詰めています。このファイル名もファイルパスも、渡し方も決まりはないので、プロジェクトごとに異なると思います。
このプロジェクトでは次のように初期化しています。
final secret = await rootBundle.loadStructuredData<Secret>("assets/secret.json", (jsonStr) async { final secret = Secret.fromJson(json.decode(jsonStr)); return secret; }); initializeApp( apiKey: secret.apiKey, authDomain: secret.authDomain, databaseURL: secret.databaseURL, projectId: secret.projectId, storageBucket: secret.storageBucket, );
秘匿情報の扱い方は以前まとめたものが参考になると思います。
まとめ
Flutter for Webのプロジェクトをデプロイするだけなら簡単です。基本的にBuildのjobで必要なものは揃っているので、あとはどこにホスティングするにしても同じ感じで行けると思います。
一部実装依存になる部分が出てきたら調整が必要です。
今回作成したページはこちらです。