先日、Google Apps Script(GAS)へのpush/deployを実行するGitHub Action「Clasp Action」をリリースしました。
はじめてのゼロからのOSS開発〜リリースだったこともあり、記録を残します。
「ゼロからのOSS開発」をしてみたい
個人的に「ゼロからのOSS開発」をしてみたいと思っていました。OSS開発自体に関しては、お世話になった、感動したOSSにコントリビュートすることがしばしばありました。しかし、自分でゼロから考えて生み出した物はないと思ったことが、今回の行動に至った動機です。また、せっかく作るなら、個人的なこだわりである以下の点を満たしたものをリリースしたいと思っていました。
- 新規性がある
- 誰かの課題を解決する
- 他者でも利用しやすい形態で公開されている
しかし、何を作るかと言ったアイデアはなかなか生まれませんでした。
経験をヒントに思いついたアイデア
アイデアは突然思いつきました。以下のような経験にヒントがありました。
- 業務やOSS活動においてCIを書くのが好きだったこと
- 業務でGASを数回使っていたこと
- Gitフローによるバージョン管理を実現するためにclaspを導入したこと
以上より、clasp(ローカル環境からGASを操作するコマンド)を利用して「Google Apps Scriptへのpush/deployを実行するGitHub Action」を作りたいなと思いました。これは、GitHubでバージョン管理しているGASプロジェクトにおけるpush/deployを自動化するという点での貢献につながります。また、GASをGitHubで管理するハードルを下げることにもなるかと思われます。
このようなGitHub ActionをGitHub Marketplaceで公開できたら、自分のこだわりを満たした上で、やりたいことが実現できるなと思いました。
競合の調査
もし、思いついたアイデアを満たすGitHub Actionがすでに存在していた場合、車輪の再発明になってしまいます。個人的なこだわりである「新規性がある」も満たせません。経験としてはいいものの、個人的なこだわりである「誰かの課題を解決する」という点での他者への貢献はないなと思い、まずは競合の調査をしてみました。GitHub Marketplaceでそれっぽいキーワードで検索してみると「Clasp Token」というものがありました。
これは特定のGASを操作するための認証情報などが格納された「.clasprc.json」を生成するというものです。記述内容的に「.clasprc.json」リポジトリに格納するのは現実的ではないため、その点で有用で素晴らしいものです。そんな.clasprc.jsonを生成することで、ローカルの環境以外、つまりGitHubのワークフロー上でのclaspの利用によるGASの操作が可能になります。これは拡張性もありいいですね。
差別化・新規性
競合として見つけた「Clasp Token」に対して、以下の点で差別化しようと考えました。
- 目的をpush/deployに絞る
- 利用者がclasp扱わなくても問題がない状態に
claspをGitHub Actionで扱う場面を考えた場合、やりたいことはコードの変更点をGASに反映させること、つまりpushやdeployだなと思いました。また、そこまで定まっているならpushもしくはdeployまでやりきってしまう方がいいなと思いました。そんな考えに基づき、claspに慣れていない人でも扱いやすいGitHub Actionにしようと考え、開発しました。
開発開始から完了まで
以上を踏まえて、開発を始めました。工期は1週間くらいで、スキマ時間を使って完了させました。
得られた知見も多いのですが、技術的なことの詳細はQiitaに書こうかと思っています。今回はポイントだけ以下に示します。
- Dockerを使ったGitHub Actionにした(DockerかJavaScriptを使って実現可能)
- エントリポイントはシェルスクリプトにした
- トライアルアンドエラーの精神で何度もテストした
- プライベートで初めてリリースタグを作った
- 公式のドキュメントに沿ってGitHub Marketplaceに公開した
- 最後の心的障壁は無理やり突破した
そんな「Clasp Action」と名付けたGitHub Actionは、現在GitHub Marketplaceで公開されています。これを見るととてもうれしい気持ちになりました😭
感想
Dockerを使ったGitHub Actionは意外と簡単に作れるんだなと思いました。今回、主に書いたのはシェルスクリプトです。ここに実現したい処理を書くのですが、「それだけでできるのか!」と思いました。他の方のリポジトリをみたところ、この部分を、例えばPythonで書いてあったりもしました。それゆえ、Dockerを使ったGitHub Actionは色んな人のやりたい方法で開発できる柔軟な方法だと思いました。新規性さえ見つけられたら(それが難しいんですが…)引き続き開発してみたいです。何より、工期も長くない、小さなものですが、自分がこだわっていた点を満たしたものを作れたのは本当に良かったです。
ひとまず「ゼロからのOSS開発〜リリース」実績解除!(実際やったことはかなりシンプルなのでOSSと言えるものなのかは不安ですが…)今後起こりうる、鬼のバグ報告、要望、バリバリのコントリビュータの出現、初めてのレビューなどを楽しみにしています。
何はともあれ、
- 新規性がある
- 誰かの課題を解決する
- 他者でも利用しやすい形態で公開されている
と言ったこだわりも満たしている「Clasp Action」を是非使ってください🙏
おまけ
学生時代、アルバイトで「GitHubでソフトウェア開発者にフィードバックを与えるチャットボットの実現」を目的としたソフトウェア開発に携わっていた時期あります。課題を解決するためのアイデアを考えたり、壁打ちの壁になることにやりがいを持っていました。しかし、プログラミングが苦手だったため、自分の力不足で、自分の担当箇所は、うまくリリースに漕ぎ着けなかったという、苦い思い出です。もしうまくいけば、GitHub Marketplaceで公開する予定でした。2年がたった現在、偶然ですが、自分がゼロから開発したOSSをGitHub Marketplaceに公開しました。少しだけ自分の中のモヤモヤが晴れた気がします。