2019年にお金を払ったサービス
ふとTLに流れてきたので、やってみた。
増税があったりドルが混ざってたり月額年額が混ざってたりと費用はどんぶり勘定です。
新規
マネーフォワードME 5300円 / 年
今までスプレッドシート運用だったけどクレカ明細やキャッシュレス、PASMOとかの中まで把握・管理できるのよい。品目別に分析するの楽しい。
Apple Developer Program $99 / 年
仕事でモバイルアプリ開発やることになって、自分で実機に入れたりしたくなったので勉強用。正確には以前登録して更新しなかったのを復活させた。
継続
Amazon Prime 4900円 / 年
値上がりつらい。
Google Drive 100GB 2500円 / 年
主にGoogle Photo用。DropBoxはもう全く使わなくなった。まだ半分以上空いている。
dマガジン 440円 / 月
今年もお世話になった。コスパいい。
To Me Card 2200円 / 年
オートチャージ用。普通に使って元が取れることがわかった。
日本経済新聞Wプラン 5900円 / 月※
実家と折半。実家で紙の購読辞めるって言ったら電子版プランに変える。
IntelliJ IDEA Ultimate Personal 13600円 / 年
2年目なので。来年はもうちょっと安いらしい。
Evernote Plus 3100円 / 年
デバイスがいっぱいあるので課金。ただ最近あまり使わなくなってきたなぁという印象。
お名前.com 1390円 / 年
個人ドメインの維持のため。
解約
Wi2 390円 / 月
使わなくなったので。テザリングでよくなった。
青山カード 1350円 / 年
クレカ整理のついでに解約した。自動音声で解約できた。
2019年の振り返り的な何か
今年もざっくり振り返ろうと思う。2018年の記事はこちら。
2019年にできたこと
AWS SAを取る
2月に取った。
GoをJava/PHPと同じくらい書けるようになる
シェルスクリプトではやりきれないやつをGoでサクっとかけた。ただ使ってないと文法忘れるので意識的に書かないと忘れそう。
Firebase + iOS or Android or JSで何か作る
仕事がモバイルアプリ開発になったので、Flutterでサンプルアプリを作ったりできた。
GCPをAWSくらいできるようになる
GCPのquicklabのキャンペーンを全部埋めてk8sTシャツもらった。
PHP以外のフロントエンド開発(html/css/jsとかブラウザとか通信とか)の設計がわかるようになる
モバイルアプリの設計めっちゃやってる(できるとは言ってない)。フロントエンドの状態管理の設計めっちゃ難しい。けどできるようになりたい。
外部イベントの運営・ボランティアスタッフをやる
DevOps Days Tokyo 2019のボランティアスタッフとXP祭りの運営をお手伝いした。運営サイドから見える景色もいいものですね。
JAWS-UGのアーキ支部でCI/CDに関して議論できたのもよかった。
ブログを最低月一回投稿する
9月はすべりこみだったけど、なんとか月1ペースで投稿できた。
競技プログラミングを再開する
再開できた。
8月まではコンスタントにコンテスト参加できてたけど、9月以降は多忙 & レート下がり恐れからサボり気味になった。ちなみにPASTは初級でした。しょぼい。精進したい。
2019年にできなかったこと
Spring Bootでアーキテクチャ設計できるようになる
SprintBootを1.xから2.xにするのをちょろっとやって以来、一切触らなかった。忘れてそうなのでどっかでリハビリしたい。
英語学習を復活して少なくともTOEICスコア(785)を更新する
765だった。勉強しないとスコアは上がらないらしい。
半分できて、半分できなかった。
3年後、5年後の自分の仕事・人生の具体的なイメージを持つ
今年の主な仕事がモバイルアプリ開発だったので、これでネイティブアプリ・Webフロント・サーバサイド・AWSと一通り触ったことになったので良かった。あとやってないのはコンテナ・k8sくらいかな。
今年は一人称でCI/CDおじさん業をやってのけたので、この領域にはだいぶ力がついたなぁという気持ちにもなった。
ただ一通りやってみて、開発のコアになるシステムやアプリをどういう作りにするといいのかという設計に関して、周りをリードできる力がないと痛感したので、設計の領域でもっと精進したいと思った。
あとチーム開発をどううまく回すか的なエンジニアリングマネージャー業にもスクラムのプラクティスの延長で興味関心があるので、うまく業務の中で試行錯誤できたらいいなと思った。
その一方でできてないと思う点は、会社の枠を越えて自身の人生においてどう生きていくか、考えたけど結局行動に移せなかったから。
いろいろ見たけど、うーんという気持ちで結局コンフォートゾーンから抜け出さなかった。
この辺はもうちょっと言語化と情報収集を継続して頑張りたい。
主なアウトプット
GitLabとFlutterがメインだった。
- GitLab
- GitLab Meetup Tokyo 16 でLT発表しました #gitlabjp - つばくろぐ @takamii228
- GitLab CI RunnerをMac上に構築する - Qiita
- GitLab CEでMerge Request時のCIを事前にマージしてから実行する - つばくろぐ @takamii228
- GitLabでtagとtagの間に含まれるMRリストを取得する - つばくろぐ @takamii228
- GitLab APIを使ってtag名とtagのタイムスタンプをcsv形式で出力する - つばくろぐ @takamii228
- flutterのバージョンをGitLab CI Runner上で動的に切り替える - つばくろぐ @takamii228
- Flutter
- ブランチ戦略
GitLab CI使ってFlutterのCI/CDパイプラインを作った話をどっかでアウトプットしたいお気持ちなので年始頑張ろうと思う。
GitHub
特に何か公開しているわけではないけど。
takami228 (Masanori Takami) · GitHub
振り返り
↑も合わせて、2019年を振り返ってみた。
良かったこと・できたこと
- 未経験・新しい技術に対して学ぶ姿勢が継続できていること
- 月1ブログ投稿が継続できていること
- コミュニティ活動の運営側に関われたこと
- 競プロが再開できたこと
- ISUCONに初参加できたこと
- Jira Cloud / Confluence Cloudで情報管理できていること
やっぱり目標があると前にすすめるのでよい。前に立てた目標の半分くらいは達成できた。
ISUCONは初見殺し感はあってボロボロだったけど楽しかった。来年も出たいなぁ。
あとAtlassianのツールが無料で使えるようになったのは大きい。ちょっとしたメモをConfluenceに集約できるし、読書や目標管理にJiraが使える。
良くなかったこと・できなかったこと
- 積読やWIPの本が残ってるのに新しい本を買ってしまったこと
- 1回しか外部発表できなかったこと
- 働きすぎたこと
- 働きすぎて?体調を崩しそうになったこと
- 3年後、5年後の自分の仕事・人生の具体的なイメージを持つことを先送りにしたこと
本を買いすぎて、家のスペースを圧迫しだした。ちゃんと読んで手元に置くものとそうでないものを種別したい。
夏あたりからちょっと働きすぎてしまった。ちょっとハイになっていたところもあったかもしれない。最近突発的に目眩が起きて辛い思いをした。
やはり健康第一なので、食事・運動・睡眠には注意したい。
2020年の抱負的な何か
いくつできるかわからんけど、今年もとりあえず書いてみる。
- AWS SA Pro or DevOps Proを取る
- GCP Professional Cloud Architectを取る
- TOEICスコア(785)を更新する
- AtCoderで緑キープ & レート1000になる
- PASTで中級になる
- ISUCONに出る(開催されれば)
- フロントエンドの設計を理解する
- いわゆるアーキテクト業を自信を持って遂行でき、自分の色を出せるようになる
- いわゆるエンジニアリングマネージャー業を自信を持って遂行でき、自分の色を出せるようになる
- CI/CD関連できちんと言語化してなんかアウトプットする
- 3年後、5年後の自分の仕事・人生の具体的なイメージを持つ
- 健康を維持・推進する
2020年はいくつできるかな、頑張ろう。
最後に、去年はこんなことを書いていた。
社会人歴5年目だけどまだまだ自分がこれから進みたい方向性はぶれてるので、いろいろつまみ食いしながらレベル上げしたいと思ってる。 けどいろんなところに顔つっこみ過ぎている感もあるし時間は有限なので、かけるべき時間と期限を決めてうまくやっていこうと思う。
今年は社会人6年目で、いろいろ区切りがいいなーと思ってた。小学校6年、中学・高校6年、大学・大学院6年。 年齢はアラサー。何か環境を変えるようなことをしようかなと思ったけど、行動には移さなかった。このままズルズルいくのもアレなので、人生のマイルストーンを真剣に考えねば。
でもまだまだ霧の中を歩いているような気分なので、2020年もいろいろつまみ食いしながらレベルアップしていこうと思う。
flutterのバージョンをGitLab CI Runner上で動的に切り替える
この記事はFlutter Advent Calendar 2019 (#2)の記事です。
※12/21 8時時点で18日分に空きがあったので埋めさせていただきました(参考)
はじめに
GitLab CIを使ってFlutterのCI/CDをやっているのですが、CI環境において複数のFlutterのバージョンを管理する必要があり、少し悩んだので以下にまとめます。
GitLab CI Runnerは以下のような感じで、shellモードでMac mini上で動かしています。
今回、Flutterのバージョンアップの検証が必要になったのですが、すでに配信中のアプリで利用しているFlutterのバージョンに対してはバージョンアップが完了するまでの間に緊急パッチを宛てる可能性があります。そのため、緊急パッチのビルド時につかうFlutterのバージョンと、バージョンアップ検証で使うFlutterのバージョンをそれぞれのビルドで使い分ける必要があります。
検討した解決策
CI環境上で複数のflutterのバージョンを動作させる方法として、以下の2つ案を考えました。
- 配信版と追加開発をブランチを分けて、ブランチごとに固定のGitLab CI Runnerを割り当てる
- GitLab CIの実行時に使うバージョンを動的に切り替えられるようにする
メリット・デメリットは以下の通りです。
案1 |
|
|
案2 |
|
|
GitLab CIではCI Runnerにタグをつけることができ、tag
、only
、except
等を記述することで特定のブランチのジョブを特定のCI Runnerで実行させる、という設定ができます。
https://docs.gitlab.com/ce/ci/yaml/
しかしデメリットで書いた通り、普段の開発においてはfetuareブランチやhotfixブランチを切ったりリリースタグを切ったりとブランチの命名規則を複数考慮してgitlab-ci.yml
を設定するのはなかなか骨が折れます。
今回は設定が煩雑になることに加え、バージョンアップ版のリリースまでの移行期間のみ並行運用が走ること、また都度実行で増える実行時間が2-3分程度で待てるレベルであることを踏まえて2を選択することにしました。
実装
各ビルドで使うflutterのバージョンはpubspec.yamlに記載できるため、それを使ってflutterのバージョンを切り替えてからCIを実行するように.gitlab-ci.yml
を設定します。
... environment: sdk: ">=2.1.0 <3.0.0" flutter: 1.9.1+hotfix.6 ...
yamlから特定のキーの値を取得するのにはyq
が使えます。
pubspec.yamlに記載されたバージョンでflutterのversionを切り替えるシェルは以下のように記載できます。
#!/bin/sh set -x set -e # get tagert flutter version TARGET_FLUTTER_VERSION=`cat pubspec.yaml | yq -r .environment.flutter` TARGET_FLUTTER_VERSION_TAG_NAME=v${TARGET_FLUTTER_VERSION} CURRENT_DIR=`pwd` FLUTTER_DIR=${HOME}/development/flutter cd ${FLUTTER_DIR} # current version flutter --version # flutter checkout git checkout -f master git pull git checkout -f ${TARGET_FLUTTER_VERSION_TAG_NAME} flutter precache flutter doctor # updated version flutter --version cd ${CURRENT_DIR}
ポイントとしてはflutterのバージョンはpubspec.yamlにはvなしで記載されているのに対し、flutterのタグではv
がついているためgit checkoutするときに付与する必要があります。
flutterのバージョンの切り替えはflutter version
コマンドを使うこともできますが、これを実行するには対象のバージョンがあるchannelをflutter channel
で事前に指定し、かつupgradeを実行して最新化しておく必要があります。
最新化がされていなかったり、切り替えたいバージョンのchannelが異なっている場合はflutter versionコマンドは失敗してしまいます。
$ flutter version -f v1.13.3 There is no version: 1.13.3 Unable to checkout version branch for version 1.13.3.
なので、今回はflutterコマンドがインストールされている場所~/development/flutter
に移動し、master上でpullして都度タグをcheckoutする方式を取るようにしました。
チェックアウトした後はflutter precache
することで依存するライブラリが落ちてきます。
最後に↑のシェルを.gitlab-ci.yml
のbefore_script
の中で実行するように設定すれば完成です。
... before_script: - ./set-flutter-version.sh ...
似たような感じでxcode-select
すればXCodeのバージョンも指定できそうですね。
gradle wrapperやmaven wrapperでのバージョン指定、Docker buildなどと同様にビルドさせる環境のツールのバージョンはgitレポジトリに定義含めてしまって、CIの実行の度に動的に変えられるようにしておくと管理が便利になりますね。
あとはflutterのバージョン切り替えもDocker Buildみたいにキャッシュできたらいいのになー。