FjordBootCampの歩み方 ~Tips編~

 

これは「フィヨルドブートキャンプ Advent Calendar 2020」の22日目の記事です。

adventar.org

 

2020年の10月にフィヨルドブートキャンプの歩み方をテーマとしたLT会が開催されました。私はバグ報告テンプレートの活用について初LTを行ったのですが、当初はFjordBootCamp Hacksといったタイトルでお役立ちTipsを話そうかなと考えていました(笑)

speakerdeck.com

 

今回、フィヨルドブートキャンプ初のアドベントカレンダーが始まり、ちょうど良い機会なので、2019年10月の参加からおよそ1年の間にブートキャンプで学んできた中で得たものや工夫していることなどのTipsを以下の4つのパートに分けて紹介したいと思います。

  • ブートキャンプ編
  • Twitter
  • Slack編
  • Alfred(作業効率化)編

 

 

ブートキャンプ編 

ブートキャンプ生は、プログラマー向けEラーニングシステムのBootCampアプリを使って、プラクティスや日報、Q&Aなどのやりとりをブートキャンプ生同士やメンターの方達と日々行っています。また、SlackやDiscord、Remoなどのオンラインツールを使ったコミュニケーションも活発に行われています。

 

ここでは、以下の点について紹介したいと思います。

  • Q&A
  • 日報
  • メンターコメント
  • 提出物
  • ふりかえりミーティング
  • Webサービス進捗報告会
  • ミートアップ
  • オンライン合同会社説明ドリンクアップ
  • Discord
  • Slack
  • Podcast
  • LT会
  • 輪読会
  • 地域の勉強会・オンライン勉強会
  • BootCampアプリ

Q&A

ブートキャンプのプラクティスを学習する中で、分からないことを質問できる場所になります。ブートキャンプ生やメンターなどの方が自由に質問や回答を行うことができます。解決したQ&Aはストックされるので、過去のQ&Aを参照することも大変勉強になります。

 

曖昧な質問には、回答が付きにくいので、より具体的に内容を記載する方がよいでしょう。また、自己回答したり、Slackで質問して解決した内容などもQ&Aに転載することができます。

日報

学んだことや今ハマっていることなどを自由に書くことができます。人によって内容はバラバラですが、今年の9月に角谷 信太郎さんによる講演のFJORD BOOT CAMP AS GATEで言及された日報はどこに力をい入れて書くのがよいか の内容が大変参考になると思います。こちらの内容をテンプレートとして使っている方も多くいます。

 

"日報"はどこに力を入れて書くのがよいか🤔

 

いまの気持ち:(感情)

あなたが書かなければ誰にも伝わらない。"相手に伝わるように"テキストで書くには訓練が必要だ。

 

やったこと(事実)

今日も一日がんばった!詳しく書きたいだろうけど、みんなは詳細を読みたいかな?

 

わかったこと:(意見, 解釈)

もちろん、感情以外も適切に伝わるようにテキスト出力するには訓練、訓練、訓練

 

次にやること:(計画,表明)

考えることは大事だけれど、明日への自分の置き手紙(明日の自分に適切に伝わるようにかけるかな?)

 

・シャウトアウト:(感謝)

チームに感謝。仲間に感謝。よい振る舞い、助かったことをフィードバックして増えたらうれしくない?

 

 

speakerdeck.com

 

youtu.be

 

また、疑問点なども書いておくと、メンターやブートキャンプ生の方がコメントを残してくれるので、日報を活用するとよいでしょう。

 

私は最低15分は毎日何かしら学習をするようにしています。学習して日報を書くとGitHub同様の草が生えるので、モチベーションの維持に役立っています。*1

 

f:id:mh_mobile:20201222081652p:plain

メンターコメント

メンターさんのコメントを見ることができます。

他の人に対する指摘は自分に当てはまることも多く、大いに参考になるので、積極的に見るとよいでしょう。

メンターさんのコメントは、ユーザーページからメンターさんのコメントを開くと確認することができます。 

 

f:id:mh_mobile:20201222085449p:plain

 

有益なコメントなどは個人のSlackにストックして、後から見返せるようにしたりしています。 後述するSlack APIを使うと、個人Slackの任意のチャンネル宛にメッセージを投稿することもできます。

提出物

ラクティス終了後は、他の人の提出物を見ることができます。

実装はただ1つの正解があるわけではないので、他の人のソースコードをみることで、効率良い書き方や他の実装方法などの気づきを得るきっかけになったりします。ぜひ、プラクティス完了後に見るとよいでしょう。

※ 後半のWebサービスを作って公開するのプラクティスの提出物は、プラクティスを完了していなくても、他の人の提出物を閲覧することができます。

ふりかえりミーティング

毎週水曜日の14:00からdiscordのfjordbootcampサーバのミーティングのボイスチャンネルでシステム開発のふりかえり会が実施されています。自身が担当したissueの進捗状況の報告やissueの見積もりなどが実施されます。まだシステム開発のプラクティスに入ってない生徒もラジオ参加可能*2なので、開発現場で行われている様子を拝見したい人はラジオ参加してみるとよいでしょう。

Webサービス進捗報告会

ふりかえりミーティング終了後の15:00からふりかえりミーティングと同様の場所で、自作Webサービスの進捗会が実施されています。今週実施したissueの進捗状況や困っていること、来週実施するissueなどを共有します。こちらもふりかえりミーティング同様にラジオ参加可能なので、参加してみるとよいでしょう。

ミートアップ

毎月、中旬〜下旬あたりに開催されます。今年の3月くらいまではフィヨルドのオフィスでオフライン開催されていましたが、コロナ禍の影響もあり現在はRemo上で行われています。現役のフィヨルドブートキャンプ生や卒業生、メンターの方などが集まるので、積極的に意見交換して参加するのがよいでしょう。

オンライン合同会社説明ミートアップ

複数社の会社説明会がオンラインのRemo上で開催されています。カジュアルにお酒を飲みながら、企業の方に質問したり、話したりできます。

最近では、8月、9月、12月に開催されました。

就職を考えている方やそうでない方も、参加してみるとよいでしょう。

Discord

以前はWhrebyやZoomで16時頃に雑談や質問が行われていましたが、最近ではDiscordが使われるようになりました。個人的に以前よりも外部から参加者が見えやすくなったため、参加しやすくなったようにも感じました。*3

 

他にも、もくもく会の作業部屋などがあるので、活用してみるとよいでしょう。

Slack

Slackには、さまざまなチャンネルがあります。

  • #技術
  • #wakaran
  • #wakatta
  • #kyushu
  • #kansai

など...

 

特に、wakaranチャンネルとwakattaチャンネルができてから、よりコミュニケーションが活性化されたように感じます。このチャンネルの作成はメンターのりほやんさんの発案なので、かなり功績が大きいかと思います。

 

私もwakaranチャンネルとwakattaチャンネルにはすごくお世話になっています。

wakaranチャンネルに書くと回答がすぐにので、wakaranことがあれば、積極的に書くとよいでしょう。 おそらく、気づいた心優しい人たちが回答してくれるはずです。

Podcast

メンターのりほやんさんがやっているPodcastにyancan.fmがあります。りほやんさんとりさきゃんさんの二人のRubyistの掛け合いが面白く、密かに更新を楽しみにしています。聴いたことない人はぜひ、聴きましょう(笑)。

 

yancanfm

yancanfm

  • yancanfm
  • Technology
  • USD 0

podcasts.apple.com

 

LT会

 3ヶ月に1回くらいの頻度で開催されています。

10月にLT会vol.5がオンライン開催されました。LT会で登壇すると、話す内容について深く掘り下げたり、発表のリハーサルなどを行ったりと、LT会の発表内容を準備する過程で得られる物が多く、参加してすごくよかったと思います。来年の1月後半にもLT会が開催されるので、(可能であれば登壇側で)ぜひ参加してほしいと思います。

輪読会

Rails輪読会

今年の7月にパーフェクトRuby On Railsの増強改訂版が出版されたこともあり、8月から毎週日曜日の8:30〜10:30の時間帯でパーフェクトRuby On Railsの輪読会が開催されています。パーフェクトRuby On Railsの著者(かつ フィヨルドブートキャンプの顧問)の五十嵐さんも参加なさっています。 

朝8時半という早い段階ですが、本当に素晴らしいと思います。私は1回だけ参加したのですが、かなり濃厚な体験だったと記憶しています。ただ、朝が弱いので、参加できておりません。

 

また、HackMDを使った輪読会ノートがWeb上に公開されています。

フィヨルド生のちろるさんのツイートのスレッドで過去の輪読会ノートを閲覧することができます。パーフェクトRuby On Railsを勉強している方は活用すると学びがあると思います。

達人に学ぶDB設計 徹底指南書 輪読会

最近では、「達人に学ぶDB設計 徹底指南書」の輪読会が毎週土曜日の22:00〜23:00の時間帯で開催されるようです。こちらも気になる方は参加してみるとよいでしょう。

地域の勉強会・オンライン勉強会

多くの方が積極的に勉強会に参加されています。

今はコロナ禍でオンライン勉強会が活発ということもり、いろいろな勉強会に参加しやすい状態かと思います。積極的に参加してみるとよいでしょう。

BootCampアプリ

ブートキャンプ後半のシステム開発のプラクティスでこれまで学習してきたEラーニングシステムのアプリの機能追加や修正を行います。

普段使ってきたシステムを自分達で改修したりするので、人一倍学びが多いと思います。

システム開発のプラクティスが終わった後にでも、PRを投げてみたり、独自に機能追加してみるのも学びがあり楽しいかもしれません😄

 

github.com

 

OSS活動

Railsのプラクティスでポリモーフィック関連を学習する中で、Railsガイドの関連付けのサンプルコードが分からない箇所があり、Q&Aで質問をしました。

 

このQ&Aの質問がきっかけでサンプルコードの間違いに気づくことができ、Railsガイドの修正を行うPRを投げるきっかけになりました。初めてのPRがRailsリポジトリにマージされて嬉しかったです。

 

github.com

 

オープンソースリポジトリにPRを投げることで、他の人にも影響を与えることができるとともに、小さな貢献でも自信につながるので、今後もやってみたいと思います。

 

また、ブートキャンプにはオープンソース開発に参加するの発展編のプラクティスもあるので、ぜひチャレンジしてほしいと思います。 

Twitter

フィヨルドブート生やメンター、アドバイザーの方などが日々Twitterで有益な情報を発信しているので、Twitterを有効に活用すると良いと思います。

 

ここでは、以下の4点を紹介したいと思います。

  • フォロー
  • リスト
  • Nuzzel
  • 検索

フォロー

ブートキャンプのユーザー一覧画面で各人が公開しているTwitterアカウントを参照することができるので、ここからフォローするとよいでしょう。 フィヨルドブートキャンプの関係者以外にも、RailsのコミュニティやJavaScriptのコミュニティなどの自分の関心のあるコミュニティの人物をフォローするとよいと思います。 

 

自分は200人程度しかフォローできていませんが、フィヨルド生やRails、フロントエンド、モバイル系のコミュティの方を中心にフォローしています。

 

また、#fjordbootcampのハッシュタグをみるのもよいでしょう。

twitter.com

リスト

 公開リストや非公開のリストを作ることができます。

現時点では、フィヨルドブートキャンプ関係者の公開リストはおそらくないと思いますが、興味の対象ごとにリストを作っておくことで、効率よく情報収集することもできます。

 

Nuzzel

Twitterでフォローしている人のつぶやきを全て見る(全て見たいかは別として)ことは時間的に厳しいです。

 

有益なつぶやきの指標としては、RT数やいいね数をもとに、IFTTTなどのツールを使って、一定数の閾値を超えた場合はSlackに通知する方法も使えると思います。

 

フォローしている人がシェアしてくれたリンクを効率的に収集する方法としては、Nuzzelを使うのがオススメです。このツールは、同じリンクを複数人がシェアした数が多いほど、アプリ画面の一覧の上位に表示してくれます。

 

nuzzel.com

 

www.danshihack.com

 

一週間の期間でフィルターをかけると、その間に話題になった記事が上位に表示されるようになります。以下の画像では、ちょうどフィヨルドブートキャンプのアドベントカレンダーの記事が表示されています。

 

また、常時Twitterを見るのは大変厳しいので、週末とかに時間をとって確認するのが時間効率の点でオススメです。とはいえ、私は 朝、昼、晩の3回くらいの頻度で見ている気がします。。

f:id:mh_mobile:20201222113442p:plain

 

その他、フォロー先のフォローしている人たちがシェアしたリンクを表示するFriends of Friendsの機能も、話題の記事や思いがけない記事を発見するのに便利です。

 

f:id:mh_mobile:20201222114254p:plain

 

同様に、先ほど紹介したTwitterのリスト毎にリンクを収集することもできます。

f:id:mh_mobile:20201222114944p:plain

 

検索

 Twitterで検索すると、情報収集に良いこともあります。

例えば、特定の勉強会のスライドを収集するなどです。他にも、Twitter検索コマンドは色々あるので、知っておくとよいでしょう。

検索例

2019年8月29日から2019年8月31日まで開催されたbuilderscon tokyo 2019のツイートを対象に検索した例です。ハッシュタグは #builderscon です。

(
url:www.icloud.com/keynote/ OR
url:slideshare.net OR
url:speakerdeck.com OR
url:dropbox.com OR
url:slidelive.jp OR
url:docs.google.com OR
url:xd.adobe.com/view OR
url:slides.com
)
since:2019-08-29 until:2019-08-31
(#builderscon)

 

qiita.com

 

Slack編

フィヨルドブートキャンプのSlackもまた、日々お役立ち情報が飛び交っています。ただ、無料枠の1万メッセージの制限があるので、generalのチャンネルだと、既に1ヶ月前のメッセージが表示されない状況です。

 

これまで、Slackのメッセージをストックする方法については、あれこれ議論もありましたが、とりあえず自分で気になるメッセージはストックするとよいでしょう。

私の場合は、気になるメッセージや記事があった場合は、個人のSlackのワークスペースのチャンネルに投稿したりしています。

検索

ここでは、簡単にSlackのお役立ち情報を検索する方法について紹介したいと思います。

基本的には、以下のSlackの公式ページに記載されている内容になります。

 

slack.com

スレッド内のメッセージも通常検索でヒットするので、たまに検索してみるのはオススメです。フィヨルド生が分報などで書いてるお役立ち情報など思わぬ発見があるかもしれません。

リアクション検索

お役立ちなメッセージは、大抵リアクション(絵文字)が付きますので、リアクションで検索すると便利です。いい話のリアクションで検索したい場合は has::iihanashi:  や神のリアクションで検索したい場合は has::kami: といったように、has::絵文字コード: を入力します。

 

f:id:mh_mobile:20201221221344p:plain

 

f:id:mh_mobile:20201221221314p:plain

リンク検索

has:link を入力すると、リンク付きのメッセージを検索することができます。

任意のメンバーのメッセージ検索

from:@表示名で、任意のメンバーのメッセージを表示することができます。

メンターさんやアドバイザーさん、その他の方のメッセージを追う際に役に立ちます。

個人Slack

有料版の個人Slackのワークスペースを契約して使っているのですが、プラクティス毎にチャンネルを作ったり、多くのアプリを連携することができ、メリットがあると感じています。

ラクティス用のチャンネル作成

今は、自作Webサービスのプラクティスをやっていますが、ペーパープロトタイプのスクラップや気づきなどのメモなどに活用しています。

 

f:id:mh_mobile:20201221223230p:plain

 Slackアプリの導入

GitHubのアプリやTrelloのアプリなど自由にインストールすることができます。特定のチャンネルに通知を飛ばすとステータスを確認する際に便利です。 

また、フィヨルドブートキャンプのSlackには、Colaさんが導入されています。平日の11頃にインタビューされたメンバーの回答がシェアされ、話題のきっかけに大いに役立っているようです。

atengagement.com

 

実は、私の個人Slackにも導入しており、 平日毎日質問が来るので、少し考えるきっかけになったりしています(笑)。

※ 最近、回答した内容が一望できるページができたので、後で見返す際に便利です。 

メールの転送

ブートキャンプのコメント通知やお知らせ通知がメールに届くのですが、SlackのEmailアプリを導入して、任意のチャンネルにメール転送しています。支払いの領収書の確認など意外と便利です。*4

 

f:id:mh_mobile:20201222220610p:plain

Slack API

Slack APIを使って、任意のチャンネルにメッセージを投稿することができます。*5

iOSショートカット機能やCLI、後述するAlfred WorkflowなどからSlack APIを呼び出すと簡単にメッセージを投稿できて便利です。

SlackのURLスキームの活用

PC版やモバイル版のSlackアプリには、URLスキームが定義されています。

api.slack.com

 

SlackのURLスキームは slack:// で定義されており、以下のteamとidのクエリ付きでslack://channelを呼び出すと、指定のワークスペースのチャンネルに直接遷移することができます。

 

slack://channel?team={TEAM_ID}&id={CHANNEL_ID}

 

後述する、AlfredアプリのWeb検索機能を使うと、すぐに任意のチャンネルに遷移することができ便利です。

 

TEAM_IDとCHANNEL_IDの調べ方ですが、特定のSlackのワークスペースをPC版のSlackで開くと、URLにTEAM_IDとCHANNEL_IDが含まれるので、そこから調べることができます。

 

https://app.slack.com/client/{TEAM_ID}/{CHANNEL_ID}

Alfred(作業効率化)編

AlfredはホットキーやキーワードでWeb検索や自動化プログラムのワークフローを実行して、作業を効率化するアプリです。 

 

www.alfredapp.com

 

このアプリを使うと、作業の生産性を向上させることができます。

Alfredには、無料版と有料版(powerpack)があります。

無料版と有料版(powerpack)には主に以下の違いがあります。

 

無料版

  • アプリ起動
  • ファイル検索
  • Web検索

有料版(無料版の機能を含む)

 

ここでは、無料版のWeb検索機能と有料版のワークフローについて取り上げたいと思います。 

Web検索

ショートカット用のキーワードや検索キーワードを使って、素早くWebページを開くことができます。

 

例えば、

  • ブートキャンプのQ&Aや日報の検索
  • 日報画面を開く
  • ローカル開発環境のWebページを開く

など...

 

日報の検索などは、

https://bootcamp.fjord.jp/searchables?document_type=reports&word={query}

のリンクのように、document_typeパラメータにreports、wordパラメータに検索キーワード用の{query}を定義します。

 

以下の画像では、fjord-rのキーワードで日報の検索ができるように設定しています。

Alfredの検索バーで  fjord-r キーワード と入力すると、{query}にキーワード文字列が置換された状態で検索されます。

 

f:id:mh_mobile:20201222125943p:plain

 

同様に、日報画面のURLやローカル開発環境のWebページのURLを定義すると、素早くWebページを開くことができ、時短になります。 

SlackのURLスキーム 

SlackのURLスキームの活用の節でも前述しましたが、SlackのURLスキームをWeb検索で定義すると、素早く任意のSlackのワークスペースのチャンネルに遷移できます。

 

以下は、フィヨルドのSlackのチャンネル毎にWeb検索のURLスキームを定義した例になります。b-wakaran と入力して候補を確定させれば、wakaranチャンネルに遷移します。

 

チャンネルが多い場合など、チャンネルを探して選択する手間が省けて意外と便利です。*6

f:id:mh_mobile:20201222020438p:plain

 

f:id:mh_mobile:20201222020640p:plain

Alfred Workflow

最後にAflred Workflowを紹介したいと思います。*7

 

ワークフローを自動化するツールには、有名所で主に以下があります。

  • IFTTT(Web)
  • Zapier(Web)
  • iOSショートカット(モバイル)
  • Alfred Workflow(Mac

他にもたくさんあると思いますが、これらのツールを使うと身の回りの作業を自動化することができます。

 

iOSショートカットに関しては、ちょうど1年前のアドベントカレンダーで記事を書いたので、こちらも参考にしてください。この記事の中で、IFTTTでSwichBotを動かす例も書いています。

qiita.com

 

また、ワークフローの自動化を考える際には以下の書籍が役に立つかもしれません。

ワークフローは、UNIXのパイプの考え方に近い気がします。

www.ohmsha.co.jp

 

他にも、まだ読んだことはないですが、レビューの評判が大変よいのでこちらのPythonの書籍も参考になるかもしれません。

www.oreilly.co.jp

 

今回は、Alfred Workflowを使って、Mac上で作業を行うスクリプトを実行し、自動化プログラミングを行う方法について紹介します。

 

まずは、ワークフローを自作する前に3つの便利なワークフローを紹介したいと思います。

GitHub

GitHubと連携したワークフローを使うと、自分のリポジトリに素早くアクセスすることができます。リポジトリ名の後にprojectsやissuesなどを入力して、projectやissue画面に遷移することもできます。

 

f:id:mh_mobile:20201222140959p:plain

github.com

  

Twitter 

Mac版のTwitterアプリを使って、新規ツイートの作成やキーワード検索などを行うことができます。

 

f:id:mh_mobile:20201222160232p:plain

 

github.com

 

Slack

Slackのワークスペースと連携することで、指定のチャンネルにメッセージを直接投稿したり、チャンネルに直接遷移することができます。

分報的な使い方もできなくはないです。。

こちらのワークフローは認証が必要なため、個人Slackに導入しています。

 

f:id:mh_mobile:20201222161242p:plain

 

Alfred標準では、アクションを実行した後にウィンドウが閉じてしまうため、再度入力が必要となり面倒です。↑の方向キーを押して履歴を遡るか、AlfredのAdvance設定のShow latest query if within 5 minutes にチェックを入れるすることで、検索クエリを維持することができます。

f:id:mh_mobile:20201222162259p:plain

 

github.com

 

自作ワークフロー 

 

ワークフローで実行するスクリプトは、Alfred標準では以下のスクリプトを使うことができます。

など...

 

ただし、外部のスクリプトBashZshなどのシェルを使って呼び出すことも可能なので、GoやRust、JavaScriptなど個人の好きな言語を使ってスクリプトを実行できます*8

 

ワークフローを作成するフレームワークとして、AlfyというNode.jsのフレームワークがあります。これを使うと簡単にリスト型(検索結果を一覧表示)のワークフローを自作することもできます。同様に、RubyやGoなどのフレームワークも存在はしているようです。*9

 

github.com

 

フィヨルドブートキャンプでは、主にRubyJavaScriptを中心に学ぶため、これらのプラクティスを終了した生徒なども、RubyJavaScriptで作ったスクリプトでワークフローを自作することができます。ぜひ、ワークフローの自作にチャレンジして欲しいと思います。

 

今回、自作するワークフローですが、「フィヨルドブートキャンプ Part Advent Calendar 2020 」14日目の佐野真潮さんの日報を書こう!の日報自動投稿プログラムにインスパイアされ、この日報自動投稿プログラムをお借りして、ワークフローを自作してみました。*10*11

mashoo1101.hatenablog.com 

自作した4つのワークフローは以下になります。

  • 日報自動投稿プログラム
  • 自分の日報一覧取得
  • みんなの日報一覧取得
  • ドキュメント検索

日報自動投稿プログラムのワークフローに関しては、ログイン情報の部分と投稿する日報のテンプレートの文章を除いてオリジナルのコードを使用しています。その他の3つのワークフローに関しては、日報自動投稿プログラム内の認証処理の部分を流用しています。

日報自動投稿プログラムのワークフロー

まずは、日報自動投稿プログラムをワークフローから実行できるように作ってみました。

キーワードのfjord-create-wip でワークフローを起動するように、keyword inputオブジェクトを配置しています。また、Push NotificationのオブジェクトをRun Scriptオブジェクトと接続することで、投稿完了後に、投稿しました!の通知がMac上にポップアップされます。

 

f:id:mh_mobile:20201222163621p:plain

ワークフローが起動されると、Run Scriptオブジェクト内部に定義したスクリプトのaction.rbが実行されます。

 

f:id:mh_mobile:20201222164051p:plain

 

action.rbのスクリプト自体は、ワークフロー用のフォルダ上に格納されています。

 

gist.github.com

 

スクリプト上では、ログインユーザーのログイン名とパスワードをAlfred上で環境変数を取得するように変更を加えています。

 

環境変数の設定自体は、ワークフローの作成画面の右上の[x]を押下すると、環境変数の設定画面が表示されるので、ここにログイン名とパスワードを追加します。*12*13

 

f:id:mh_mobile:20201222170652p:plain

 

環境変数を設定後に、実際にfjord-create-wipのキーワードを入力すると、以下のようになります。

 

f:id:mh_mobile:20201222171244p:plain

実際にワークフローを実行するとスクリプトが実行され、投稿しましたの通知がMacの画面上にポップアップされます。その後、BootCampアプリの自分の日報一覧画面で日報がWIPとして作成済であることを確認できます。

 

f:id:mh_mobile:20201222171638p:plain

 

ワークフローのソースコードは以下のGitHubリポジトリにアップしています。releaseタブからalfredworkflowファイルをダウンロードし、alfredworkflowファイルをダブルクリックすることでワークフローを自分のAlfredにインストールすることができます。

 

実際にワークフローを使用する際には、ログイン名やパスワードが必要になります。

 

github.com

  

自分の日報一覧取得用のワークフロー

ワークフローの基本的な流れは以下になります。

  1. BootCampアプリにログインする。
  2. 自分の日報一覧のページをリクエストする
  3. 2のレスポンスをスクレイピングして、日報一覧の情報を取得する
  4. 日報一覧の情報をAlfred WorkflowのScritp FilterのJSON形式に変換し標準出力する
  5. Alfredに表示されるリスト上の日報を選択すると、該当の日報画面に遷移する。

1の手順までは、日報自動投稿プログラムと同じ処理になります。2で自分の日報一覧のページをリクエストしていますが、APIではない通常のWebページのレスポンスであるため、レスポンスのHTMLをスクレイピングして自分の日報を取得する必要があります。

 

今回は、Nokogiriを使ってHTMLをパースし、日報のタイトルやサブタイトル部分(ユーザー名や日報の日時など)を取得しています。

 

また、日報一覧はページングされたレスポンスとして返ってきますが、APIのレスポンスではないのと、複数のページングのリクエストを処理することが面倒という理由で、最新の1ページ分の日報一覧のみを取得します。

 

f:id:mh_mobile:20201222000002p:plain

 

環境変数にログイン情報と日報取得対象のユーザーIDを設定後、実際にfjord-my-reportsのキーワードを入力すると、以下のように自分の日報一覧が表示されます。

 

f:id:mh_mobile:20201221235555p:plain

 

github.com

 

みんなの日報一覧取得用のワークフロー 

ワークフローの基本的な流れは以下になります。

  1. BootCampアプリにログインする。
  2. みんなの日報一覧のページをリクエストする。
  3. 2のレスポンスをスクレイピングして、日報一覧の情報を取得する。
  4. 日報一覧の情報をAlfred WorkflowのScritp FilterのJSON形式に変換し標準出力する。
  5. Alfredに表示されるリスト上の日報を選択すると、該当の日報画面に遷移する。

 

2のリクエストページ以外は、自分の日報一覧取得用のワークフローと同じになります。みんなの日報一覧の特徴としては、WIP状態の日報まで取得されるのと、誰の日報か一目でわかるようにユーザーアイコンをダウンロードして表示するようにしています。既にユーザーアイコンが取得済の場合はアイコンは再取得されません。

 

WIPの日報を表示したくない場合もあるため、nowipの引数がAlfredの検索バーで入力された場合、WIPではない日報一覧を取得するようにします。ただし、既存の日報一覧のレスポンスからWIPの日報をフィルタリングするので、WIPでない日報一覧は通常に比べると件数が少なくなります。

 

f:id:mh_mobile:20201222183709p:plain

環境変数にログイン情報を設定後に、実際にfjord-all-reportsのキーワードを入力すると、以下のようになります。

 

f:id:mh_mobile:20201222180849p:plain

fjord-all-reports nowipのキーワードを入力すると、以下のようになります。

f:id:mh_mobile:20201222181037p:plain

 

ここまで作って気づいたのですが、通常検索でWIPなしの日報を表示する方が便利だなと思いました(笑)

 

github.com

ドキュメント検索のワークフロー

BootCampアプリ上では、以下のドキュメント種別の内容を検索することができます。

 

  • すべて
  • お知らせ
  • ラクティス
  • 日報
  • Q&A
  • Docs

 

f:id:mh_mobile:20201222182248p:plain

 

ただし、上記の画像には、提出物の項目はありません。すべての種別で検索した場合のみ、提出物のコメントなども検索結果に表示されるようです。おそらく、カンニング防止を考慮しての仕様かなと少し思いました。🤔

 

また、検索結果は、更新順で表示されます。

以下の画像は、すべてのドキュメント種別をGitHubのキーワードで検索した例になりますが、更新順で提出物、日報、Q&Aが表示されることを確認できます。

f:id:mh_mobile:20201222183316p:plain

 

上記で説明した検索結果をワークフローで取得します。

ワークフローの基本的な流れは以下になります。

  1. BootCampアプリにログインする。
  2. 検索したいドキュメント種別に応じて、検索ページをリクエストする。
  3. 2のレスポンスをスクレイピングして、日報一覧の情報を取得する。
  4. 日報一覧の情報をAlfred WorkflowのScritp FilterのJSON形式に変換し標準出力する。
  5. Alfredに表示されるリスト上の日報を選択すると、該当のドキュメント種別の画面に遷移する。

 

基本的な流れは、日報一覧取得のワークフローと同様ですが、2ではドキュメント種別に応じてリクエスト対象のURLを組み立てる必要があります。また、3でドキュメント種別に応じてHTMLのパース対象の項目に違いがあるので注意が必要になります。そのため、検索対象のドキュメント種別に応じて、パース処理などを行うインスタンスを生成して切り替えるようにします。
 

f:id:mh_mobile:20201222015854p:plain

 

実際にワークフローを実行する際のコマンドは、以下になります。

 

fjord-search <ドキュメント種別の略語> <検索キーワード>

※ ドキュメント種別の略語は必須

※ 検索キーワードはオプション

 

すべてのドキュメントを検索したい場合:

fjord-search a <検索キーワード>

 

f:id:mh_mobile:20201222185710p:plain

 

お知らせを検索したい場合:

fjord-search i <検索キーワード>

 

f:id:mh_mobile:20201222185841p:plain

 

ラクティスを検索したい場合:

fjord-search p <検索キーワード>

 

f:id:mh_mobile:20201222190521p:plain

 

日報を検索したい場合:

fjord-search r <検索キーワード>

 

f:id:mh_mobile:20201222190201p:plain

 

Q&Aを検索したい場合:

fjord-search q <検索キーワード>

 

f:id:mh_mobile:20201222190409p:plain

 

Docsを検索したい場合:

 fjord-search d <検索キーワード>

 

f:id:mh_mobile:20201222190021p:plain

 

github.com

 

おわりに  

少し長くなりましたが、半分はAlfredの記事になってしまいました。

 

最後の日報一覧取得のワークフローなどは検索実行毎にログインを行うため、実用的でないかもしれません。今後、BootCampアプリのAPIがオープン化されて、自由に日報などのデータを取得できるようになることを期待したいと思います。その際は、ネイティブアプリとかも作れるといいなと勝手に妄想しています。

 

最後に、この記事のTipsが少しでも誰かに役立ったのであれば幸いです。

 

それでは、引き続き2021年もよろしくお願いします🙇‍♂️

*1:日報を書き忘れることは頻繁にあります。

*2:ラジオ参加は視聴するだけの参加方式です

*3:ただ、私は16時の雑談にはまだ1回しか参加できていません。。

*4:Slackのメール連携は有料プランのみです。

*5:Slack APIトークンが必要です。

*6:アイコンはチャンネル毎に分類した方が分かりやすいかもしれません

*7:Alfred Workflowを使うには、有料版のpowerpackの購入が必要です

*8:前述したGitHubやSlackのワークフローではPHPが使われるいるようです。

*9:評判のよいフレームワークかは分かりません。

*10:ワークフローを自作するのは、今回初めてです

*11:日報自動投稿プログラムを使用する許可は事前に頂いています

*12:APIキーなどの秘密情報もここで環境変数として設定することが多いですが、GitHubなどにワークフローのソースコードをアップする際には、秘密情報をアップしないように注意が必要です。

*13:環境変数の設定項目のDont' Exportにチェックを入れるとよいでしょう