AREKORE

桂川大輝のアレコレ

Google Apps Scriptへのpush/deployを実行するGitHub Action「Clasp Action」をリリースするまでの記録

先日、Google Apps Script(GAS)へのpush/deployを実行するGitHub Action「Clasp Action」をリリースしました。

github.com

はじめてのゼロからの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」というものがありました。

github.com

これは特定の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で公開されています。これを見るととてもうれしい気持ちになりました😭

f:id:daikikatsuragawa:20210429020618p:plain

感想

Dockerを使ったGitHub Actionは意外と簡単に作れるんだなと思いました。今回、主に書いたのはシェルスクリプトです。ここに実現したい処理を書くのですが、「それだけでできるのか!」と思いました。他の方のリポジトリをみたところ、この部分を、例えばPythonで書いてあったりもしました。それゆえ、Dockerを使ったGitHub Actionは色んな人のやりたい方法で開発できる柔軟な方法だと思いました。新規性さえ見つけられたら(それが難しいんですが…)引き続き開発してみたいです。何より、工期も長くない、小さなものですが、自分がこだわっていた点を満たしたものを作れたのは本当に良かったです。

ひとまず「ゼロからのOSS開発〜リリース」実績解除!(実際やったことはかなりシンプルなのでOSSと言えるものなのかは不安ですが…)今後起こりうる、鬼のバグ報告、要望、バリバリのコントリビュータの出現、初めてのレビューなどを楽しみにしています。

何はともあれ、

  • 新規性がある
  • 誰かの課題を解決する
  • 他者でも利用しやすい形態で公開されている

と言ったこだわりも満たしている「Clasp Action」を是非使ってください🙏

おまけ

学生時代、アルバイトで「GitHubでソフトウェア開発者にフィードバックを与えるチャットボットの実現」を目的としたソフトウェア開発に携わっていた時期あります。課題を解決するためのアイデアを考えたり、壁打ちの壁になることにやりがいを持っていました。しかし、プログラミングが苦手だったため、自分の力不足で、自分の担当箇所は、うまくリリースに漕ぎ着けなかったという、苦い思い出です。もしうまくいけば、GitHub Marketplaceで公開する予定でした。2年がたった現在、偶然ですが、自分がゼロから開発したOSSGitHub Marketplaceに公開しました。少しだけ自分の中のモヤモヤが晴れた気がします。

新卒2年目の振り返り

2019年4月に新卒として社会人になり、そろそろ新卒2年目を終えます。キリもいいので一度色々と振り返ります。

仕事

ここはボロが出て、語弊を招いてしまうと困るのでザックリと。

データサイエンス的な業務

入社のモチベーションでもあった、やりたい仕事の立ち上げに関わり始めました。詳細はコチラ。

blog.techscore.com

マーケティング民主化を実現する」…これは自画自賛でいい言葉…DataRobotさんを参考にしているんですが、僕の思っていたモヤモヤがきれいに言語化できたいい見出しです。

簡単に言うと、学生の頃から魅力を感じていたデータサイエンス的な業務(の立ち上げ)、特に「民主化」、「コモディティ化」といったことを目的とする業務に関わっています。とてもやりがいがあります。ビジネスでは、研究や趣味とは違った観点があり、とても勉強になっています。派手なことはまだできてないですが、着実にドメイン知識を付けたり、議論したり、(うまくいかなかったり)、楽しいです。もっと対外的にアウトプットできるようになった時、あるドメイン知識について、競合他社の方と「ここ、難しかったですよね!?どう考えていますか?」って切り口で議論したいです。技術的な部分でも、自然言語処理にも初めて関わりましたが、面白いですね。はやく形になってほしい!

初の受賞

部で賞をもらいました。その他、社内の様々な評価制度でうれしいコメントをもらいました。特に、上記で紹介したように、自分の個性ともいえるデータサイエンス的なことで貢献できたことや、その他いろんなことに積極的に首を突っ込んだことを評価してもらいました。賞をもらうという経験が今までの人生でなかった(本当は市の絵のコンクールで入賞経験はある)ので、両親にも伝えました。親孝行になったかな。

勉強会

他社データ分析業務に関わる方々に誘っていただき、勉強会にも参加しています。ベイズや効果検証など。正直追い切れてないですが、ビジネスに生きそうな知識が得られた気がします。何より、社外の人と関わることで、境遇の異なる方の意見が得られることが刺激になっています。こんな本を読んでいます。

リモートワーク

慣れました。逆に生活とのバランスをとりやすいところがいいと思っています。あとは、いい感じの机というか、仕事部屋が欲しいです。かっこいいモニターやキーボードも。

個人

データ分析コンペ

Kaggleはあまりやっていませんでしたが、SIGNATEは少しだけ本気でやってみました。泣きながらGoogle Colabを実行して、クラッシュして…を繰り返していました。そのおかげもあり、「ひろしまQuest2020#stayhome【球種予測部門】」では、「206位 / 481人投稿」という結果になりました。自分としてはまあまあ良かったんじゃないかと思います。(銅メダル、ほしかったな…)2021年3月19日現在、総合的な順位は45733人中1,005(上位2%)でした!

signate.jp

OSSへの貢献

ずっとやってみたいと思ってて敷居の高さを感じていたOSSへの貢献を、昨年から始めました。やっていることは、ドキュメント、単体テスト、CIの整備、リファクタリングがほとんどです。決して大きいことではありませんが、自分が素晴らしいと思えたものに少しでも貢献できることがうれしいですね。また「ふむふむ、これが最上のプロジェクトの進め方か」と勉強になることもかなり多いです。そんなことしていたら、LAPRASでは「OSSゴールドコントリビューター」になっていました。

lapras.com

コミット数(プルリクエストが通った数)は確かにありますが、自分なんてまだまだだと思いつつも、数字はうれしいですね。

一定以上のコントリビューションをおこなっているユーザをOSS ゴールド/シルバーコントリビュータとして表示しています。 現在はそれぞれ、全体の約1.5% (ゴールド)、約4% (シルバー)のタレントに付与されています。

嘘だろ…

アウトプット

基本はQiitaで備忘録を残したり。特に最近はKaggleのNotebookでAutoGluonのサンプルを公開しました。

www.kaggle.com

AutoGluonのプロジェクトではKaggleのNotebookでのAutoGluonの導入方法について議論されていました。自分もそうでしたが、すこしつまづく箇所があるのです。そこでこれを紹介してみました。するとそれをキッカケに開発者の方が自らベストプラクティスともいえる記述を教えてくれました。アウトプット、素晴らしい!という経験でした。

新卒3年目の目標

仕事・個人どちらも新しいことに挑戦したり、できることを増やしたり、心理的障壁を壊したり、風呂敷を広げた1年だったという印象があります。ということで、次はライザップの如く、結果にコミットしたいと思います。

  • ブログやってみる(まさにこれ)
  • 仕事でデータサイエンス的な成果をリリースする(もしくはリリース見込みまで)
  • Kaggleで何かしら言える結果を出す(時には称号も大事!)
  • なにか統計・データ関係の資格を取る(時には称号も大事!)
  • 何かOSSをリリースする
  • 得意を伸ばしつつ苦手をなくす

他はまあ、そうだろうなと言った内容なのですが、特に最近気にしてることが「得意を伸ばしつつ苦手をなくす」です。これについて悩む時、イメージしている概念として、リービッヒの最小律という説があります。ドベネックの桶のやつです。

これに当てはめると、結局ニガテに引っ張られちゃうので、なんとかしないとなーと思うわけです。ここでいう「なんとか」というのは、必ずしも「ガンガンいこうぜ!」ではないと思ってて、ちょっと考えている部分ではあります。

何はともあれ、新卒3年目も頑張るぞ~!