Siriの答えがどうしてこんなに悲しいんだろう…

背景

今年初めにジェンキンスCIサーバーの構築を初めてやってみたし、それをきっかけに自動化に関心が生じ、一年間暇があるとチーム内のデプロイ/開発プロセスを改善してきた。実は、関心が生じたというより、私自身もこれほど意味のない繰り返し作業を嫌う人だとは知らなかった。 何も考えずにできる繰り返し作業も、たまにはメンタルヘルスに役立つと思った。しかし、開発プロセスに溶け込んでいた手作業がやりたくなくて、何とか自動化する方法を探し、チームメンバーを説得してそれを変えてしまった。そうして数人の手を経なければならなかった面倒な繰り返し作業をほとんど自動化し、今ではSiriも私たちのアプリをデプロイできるほど簡単になった。

事前準備

当然ながら、一度はアプリのデプロイ段階が自動化されなければならない。チームごとに異なるが、通常アプリのデプロイは、少なくともバージョンアップ、ビルド、dSYM処理(クラッシュ収集ツールにアップロード)する必要があり、AppStore用にスクリーンショットを生成したり、社内デプロイ用のエンタープライズアプリであれば、ビルド結果を社内インフラにアップロードするなど一連の作業がある。

デプロイの自動化に大きな助けとなったのがfastlaneである。読みやすいAPIを使ってビルドスクリプトを簡単に作成できる。オープンソースプラットフォームなので、様々な人が作った多様なプラグインもあって、できない作業がほとんどない。特に、xcconfigファイルを変更することも、git作業を簡単にすることもでき、必要に応じてシェルスクリプトを追加することもできる。導入すれば、fastlaneコマンド1行だけでデプロイができるようになる。

そしてビルドサーバーが必要だ。最近ではクラウドベースのCIサービスが多い。開発者カンファレンスを行ってみても、CIサービスをするスタートアップでは、必ずブースを設けて広報している。travis-ci、circleci、bitriseなどがありますが、このノートでは、独自のサーバーを構築する必要がある無料のCIであるJenkinsを基準に説明する。

Siriショートカット連携

実は、Siriを連携させることが一番簡単な段階だ。CIサーバーを通じてデプロイを自動化する「事前準備」に99%の時間と労力が入る。実際、プロセス自動化は一年中作業し、Siri連携は半日しかかからなかった。最も理想的には、Jenkins jobのBuild Nowボタンをクリックするだけでアプリがデプロイされることだ。

デプロイシナリオが完了したら、Jenkins jobの設定に入り、Build TriggerでTrigger builds remotelyをチェックし、トークン値を指定する。

すると、これからはhttp://JENKINS_URL/job/JOB_NAME/build?token=TOKEN_NAMEでPOSTを送信するだけでデプロイが実行される。ただ、このままではhttp通信の際にJenkinsサーバーのauthenticationを処理する必要があるが、これが面倒なら、Build Authorization Token Rootプラグインを使用すれば上記で指定したトークンだけでアクセスできる。

このようにジェンキンスプラグインまでインストールしたら、以下のコマンドをターミナルに入力するとデプロイが始まる。

> curl -X POST http://JENKINS_URL/buildByToken/build?job=JOB_NAME&token=TOKEN_NAME

ここまでしてもデプロイがはるかにシンプルな作業になった。しかし、Siriショートカットが初めて公開した時からずっと、Siriにデプロイをさせてみるのがロマンだったので、さらに一歩踏み込んでみたた。iPhoneでSiriショートカットアプリを起動してショートカットを1つ生成する。以下のようにGet Contents of URLにデプロイURLを入れ、POSTを選択し、自分が入力したいコマンドを入力すれば良い。

感じたこと

Siriショートカット連携そのものはものすごく簡単だったが、いざやってみると1年間着実に開発プロセスを自動化して改善してきたことに対する結実を結んだ気分だった。 もしデプロイプロセスが今年初めの状態だったら、Siriデプロイはほど遠いか不可能な作業と感じたかもしれない。1回目のLet’s Swiftコンファレンスで、プレゼンターのチョン・スヨルさんが「最初から依存性が完璧に注入されたコードを作成しようとは考えないで、昨日より少しでもより良い状態にすれば良い」という言葉が印象深かった。Siri連携をしてみると、少しでもその経験をしてみたようだ。自動化しやすい方法にプロセスを変え、1つずつ、少しずつ自動化をして昨日より少しでも楽にしようとした取り組みによりここまで来られたようだ。

Siriショートカットは初めて使ってみたが、想像以上にうまく作られていて驚いた。簡単なインターフェースでも、できることは無限だ。さらに、if文、ループ文、変数の割り当て、ユーザー入力の受け取り、通知の表示なども可能で、まるでアプリ開発のように感じられる。友達に教えてくれると、冗談まじりでこれからはScratchではなく、Siriショートカットでプログラミングを学ばなければならないのではないかと言ったが、本当に不可能なことでもないようだ。たまたまギャグニュースで「No Code is New Programming」という投稿を読むことがあるが、APIが本当に高度化すると、最後の段階ではコードレスのインターフェースが誕生するということであり、これがまさにプログラミングの未来の姿だということだ。Siriショートカットがこのような概念に含まれるのではないかと思う。この文章がデプロイ自動化で始まり、Siriショートカットの賞賛で終わるようになったが、Siriショートカットが単に私のiPhoneにあるアプリを起動させてくれるのではなく、複数のAPI(アプリ)をコードなしで組み合わせるようにしてくれるということに大きなインスピレーションを得た。

「わかりました…」 があまりにも悲しくてメントを変えた。