🦀

Fortee Porposal CLIというカンファレンスの登壇者向けのツールを作成しました

2024/04/15に公開

GitHub

https://github.com/shunsock/fortee_proposal_cli/tree/main

なぜ作ったか

背景

  • 趣味・仕事でテックカンファレンスに登壇することが多く, 登壇のブログを執筆する機会が多い

課題

  • 現状では, urlを使ってブラウザからアクセスして, コピペをしている.
  • しかし, 登壇者の数が多くなると時間と手間がかかる.
  • 今年の3月に行われたPHPerKaigi 2024というイベントでは4名のプロポーザルをまとめた.
  • 会社のテックブログでは, リンクからの埋め込みができないため, OG画像をダウンロードする必要があった.
    => ブラウザーの操作部分の負担を軽減したい!!

参考: 株式会社 PR TIMESはPHPerKaigi 2024に協賛・登壇しました!
https://developers.prtimes.jp/2024/03/21/phperkaigi2024-after/

解決する課題

  • Forteeを使っているカンファレンス登壇者が登壇ブログを作成する際の負担を軽減する.
  • 具体的にはブラウザ操作をなくす. 登壇者はコマンドを打てば, 構造化された必要な情報を取得できるようにする.

作ったもの

概要

以下のようにCommandを打つとjsonが出力されます.

fortee -u https://fortee.jp/phperkaigi-2024/proposal/eff9589b-b603-4b23-aa35-42948443a80b
{
  "title": "Readable 正規表現",
  "schedule": "2024/03/07 17:30〜",
  "track": "Track A",
  "speaker": "shunsock",
  "proposal_page_url": "https://fortee.jp/phperkaigi-2024/proposal/eff9589b-b603-4b23-aa35-42948443a80b",
  "og_image_url": "https://fortee.jp/phperkaigi-2024/proposal/og-image/eff9589b-b603-4b23-aa35-42948443a80b.png"
}

また, Noticeで, jsonファイルやog imageファイルのパスとコマンドの候補の案内をします.

[notice] you can get data by running: cp /Users/shunsuke.tsuchiya/.fortee/json/proposal.json path/your/directory
[notice] you can get data by running: cp /Users/shunsuke.tsuchiya/.fortee/image/og_image.png path/your/directory

何が変わるか

ブログを書く際に, 面倒なBrowserの操作が不要になります

  • 今後は登壇者からurlを集めてコマンドを打ち, それをブログにコピペするだけになる.
  • 地味に面倒なog imageダウンロードをしなくてよくなる.

技術

使用言語・ライブラリ

特段珍しい技術は使っていないです. 評価されているソフトウェアなだけあって, 良質な開発体験でした.

  • プログラミング言語: Rust / ShellScript (install, uninstallなど)
  • Library: Clap, Reqwest, Tokio
  • CL: GitHub Actions
  • Others: Make

https://github.com/clap-rs/clap
https://github.com/seanmonstar/reqwest
https://github.com/tokio-rs/tokio

処理

大体以下のような処理を行っています.
1. Commandのパース・Routing
2. ForteeのWebページからHTMLを取得・保存
3. 正規表現を用いてHTMLから情報を抽出
4. 情報の構造化・構造化した情報の出力
5. 構造化した情報をjsonにして保存・パスの出力
6. og画像の取得・保存・パスの出力

1の部分をclap, 2や7でreqwest, tokioを使っている感じです.
なるべく読みやすいように書いたので, 興味のある方はぜひコードを覗いてみて下さい.

https://github.com/shunsock/fortee_proposal_cli/tree/main

工夫した点

  • Install / Uninstallをめっちゃ簡単にした
    • 新しいツールを使うときに一番不安になるのが環境の構築.
    • よってインストールとアンインストールの手軽さを追求した.
    • 以下のコマンドだけでGetting Startedが「完了」する.
git clone https://github.com/shunsock/fortee_proposal_cli.git 
cd fortee_proposal_cli
make install
fortee -u https://fortee.jp/phperkaigi-2024/proposal/eff9589b-b603-4b23-aa35-42948443a80b

# * uninstallはmake uninstallで実行できる
# * その他開発者用のMake Commandを作成しており, Committerは自由に使うことができる
  • 中間ファイルの置き場所
    • CLIとして使うのでどのディレクトリから動かしても同じように動いてほしい.
    • よって$HOMEに隠しファイルを作ってその中に中間ファイルを置くことにした.
    • なお, テストに使うディレクトリは別に用意している.

今後の実装予定

改善

ファイルの出力先を変えることのできるオプションを追加しようと考えています

新機能追加

image-magickを使ったプロポーザルの情報の画像出力を追加予定です. Rustにはimage-magickのclientライブラリがあり使用する予定です.
https://github.com/nlfiedler/magick-rust

Twitterに投稿できて, 簡単に自分の登壇内容を知ってもらうきっかけを増やせれば良いなと考えています

おわりに

最後まで読んでいただきありがとうございました.
開発のモチベーションになりますので, 是非スターを押していって下さい!

https://github.com/shunsock/fortee_proposal_cli/tree/main

Discussion