これを作った。
GitHub - tanaken0515/cotoha-ruby: COTOHA API client for Ruby
中身について詳しくはここに書いた。
[自然言語処理 初心者向け] COTOHA API を Ruby で使いたくて gem を作りました - Qiita
この記事では作るに至ったきっかけや作りながらのお気持ちなどを記録しておく。
作るまでの話
去年、自分 gem についてよくわかっていないな〜と思って勉強し始めた。
勉強といっても、公式ドキュメントに書いてある通りに実際に作ってみる、というだけの話だけど。
一人でやっても鳥が少ないので、みんなで学びたいな〜と思って2019年9月から社内勉強会(全8回)を開催した。
読んだドキュメントはこの辺。
- https://guides.rubygems.org/rubygems-basics/
- https://guides.rubygems.org/what-is-a-gem/
- https://guides.rubygems.org/make-your-own-gem/
- https://bundler.io/v2.0/guides/creating_gem.html
いくつかの gem のコードリーディングもした。
- https://github.com/pboling/flag_shih_tzu
- https://github.com/slack-ruby/slack-ruby-client
- https://github.com/holiday-jp/holiday_jp-ruby
この勉強会を経て、同僚の harashoo さんが https://github.com/harashoo/fujitatsu (詳しくは はじめての自作Gem - シンプルなGemを作成して公開する - Qiita 参照) を作ったり、
自分自身も https://github.com/tanaken0515/suri_lang (詳しくは 忍者スリスリくんの影武者を作っている - tanaken’s blog 参照) を作るなど、アウトプットにつながったので良い感じだった。
gem 作るの簡単だし楽しいな〜、という気持ちになっていて、なんとなく「次は API Client の gem を作りたいな〜」と思っていた。
作るきっかけの話
直近半年くらいは自然言語処理に興味があって scrapbox に調べたことをまとめたり、方言をテーマにして鹿児島Ruby会議01で発表したりした(発表の中身はほぼディープラーニングの基礎、みたいな内容になってしまったのだけど)。
そんな中 Qiita で↓の記事を読んでCOTOHA APIの存在を知り、この API の Client gem を作ることにした。
「メントスと囲碁の思い出」をCOTOHAさんに要約してもらった結果。COTOHA最速チュートリアル付き - Qiita
脱線するけれど、この記事を書いた youwht さんは自然言語処理関連の楽しい記事をたくさん書いてくださっている。
個人的に特に好きなのは
- 「写経」を自動化し、オートで功徳を積める仕組みを作ってみたのでございます。 - Qiita
- AIが三国志を読んだら、孔明が知力100、関羽が武力99、を求められるのか?をガチで考える物語(自然言語処理編) - Qiita
で、記事の構成がうまくて文書が面白いのに加えて、試行錯誤して物事を進めていく様子がすごく勉強になった。
記事を読んだ時の感想を残していたので貼っておく。
自分で問題設定をして、解いてみて、得られた結果に対して考えて、次のアクションを決めて、解いてみて、...という繰り返し。当たり前のようだけど、なんというか、すごく誠実に感じた。
— たなけん (@tanaken0515) October 12, 2019
「IFシナリオ」に "問題設定も自分で行いながら問題を解く場合は、どんな位置づけのことを実施しているのか、より抽象的な観点で確認しながら行わないとすぐに道に迷ってしまう。" という記載があって、自分も意識的にやろうと思った
— たなけん (@tanaken0515) October 12, 2019
作ってるときの話
そんなこんなで COTOHA API の Client gem を作ることにしたのだけど、API Client を作ったことがなかったのでまずは参考になりそうなものを探した。
真っ先に思い浮かんだのは RubyKaigi 2019 で発表されていた @sue445 さんのこの資料。
この資料と、この資料で紹介されていた https://github.com/asonas/chatwork-ruby , https://github.com/sue445/pixela のコードを読み、「キーワード引数を使う」「独自のエラークラスでwrapする」などを取り入れた。この発表に関しては同僚の @tsummichan さんが RubyKaigi2019 Vol.2 - ペパボテックブログ に分かりやすくまとめてくれている。
実装の全体的な方針は同僚の @shimoju_ さんが作った https://github.com/shimoju/metabase-ruby を参考にした。読みやすくてありがたかった。
作ったあとの話
実装したあと Qiitaの記事 を書いたら、↑で紹介した youwht さんからコメントを頂いて嬉しかった(自分の記事内に youwht さんの記事のリンクを貼ったから通知がいったのかも?)。
COTOHA API の Slack コミュニティでこの gem を紹介したら「この界隈Pythonが多くてRubyの記事は個人的にとても嬉しい」「これからRubyで使ってみようかと思っていたので助かります」といったコメントをもらえて嬉しかった。
作ってよかった。
この gem の todo は直近2つある。
1つ目は未対応のエンドポイントに対応すること。「固有名詞(企業名)補正」「音声認識」「音声合成」のエンドポイントがあるんだけど、有料の for Enterprise プランに申し込まないと利用できないので、現時点(cotoha v0.2.0
)では対象外としている。動作確認できないけど実装だけしようかなぁ、というところ。for Enterprise プラン、月額13万なんだよなぁ、、、。最初の3ヶ月無料とのことだけど、契約期間の縛りは無いのかな?などの調査を含めて todo だな。
2つ目はコードコメントの整備。なんも書いていないので質素な感じになってる。 https://www.rubydoc.info/gems/cotoha
適宜やっていきたい。
せっかくだからこの gem を使ってなんかやりたいな。アイデア待ち〜。
おしまい。