実録!俺が観たフィヨルドブートキャンプと業務未経験のエンジニア1ヶ月目

こんにちは。 就職してから映画を観る本数が激減したいっしーです。

この記事は、フィヨルドブートキャンプ Part 2 Advent Calendar 2022の5日目の記事として書いています。

Part1はこちら

何の記事?

  • プログラミングスクールのフィヨルドブートキャンプについて
  • Webエンジニアとして1ヶ月働いてみて

などについて書いた記事です。

以下の方に参考になるかもしれません。そうであれば幸いです。

  • フィヨルドブートキャンプに参加を検討している方
  • 業務未経験でエンジニア就職を希望する方

あんた誰?

筆者はプログラミングスクールのフィヨルドブートキャンプを1年半かけて卒業し、11月からWebエンジニアとして働いている者です。

卒業ステータスにはなりましたが、自作サービスはまだリリースしておりません(2022年12月現在)。

ほぼ完成しているもののUX上の致命的なバグがあって、終業後にMPが残っていたら取り組んでいます。

フィヨルドブートキャンプには

  • Web業界もエンジニア業務も未経験
  • 事務、接客の経験
  • 無職状態
  • 既婚、子ども1人
  • 他スクールでRuby on Railsの学習経験あり
  • 28歳(就活時は29歳)

というステータスで参加しました。

フィヨルドブートキャンプ内で「達人プログラマー輪読会」「ミノ駆動本輪読会」「アジャイルサムライ輪読会」を主催しました。

所属企業については、いまのところフィヨルドブートキャンプ内のみで公開しています。 フィヨルドブートキャンプの紹介企業で、東京に本社があって、Railsを採用している企業です。

フィヨルドブートキャンプについて

フィヨルドブートキャンプを「FBC」と省略させてください。

ラクティス

FBCではひとつひとつの学習カリキュラムを「プラクティス」と呼んでいます。

以下のページでFBCの全プラクティスを確認できます。

bootcamp.fjord.jp

自分が参加した2021年半ばの時点に比べると

  • 「Webセキュリティ」が追加された
  • 「lsコマンドを作る」が分割された
  • Ruby」〜「Ruby on Rails」の順番が入れ替わった
  • いくつかのプラクティスが「発展編」に移動して、卒業するために必須ではなくなった

といった大きな変化がありました。規模の小さなアップデートは、毎日のように行われています。

フロントエンド・サーバーサイド・インフラのどの方面においても基礎となる知識を体系的に学習できる内容になっていると思います。自分が個人的に学習したい or 将来的に登場する技術がまったく違うパラダイムのものであっても、その習得には基礎知識が前提となっている可能性が高いです。

「とは言っても ○○ って正直どうなの?いま学習する意味あるの?」と思うことがあるかもしれませんが、業務未経験の場合はあんまり気にしなくていいように思います。

FBCでの学習の本質は「何の技術を学んだか」よりも「技術を学習する経験を積むこと」それ自体だと思うからです。

「技術を学習する経験を積む」

ラクティスは基本的に以下の繰り返しです。

  1. ラクティスページのドキュメントを読み、学習対象について知る

    (Unknown unknowns を Known unknowns にする作業)

  2. 学習対象について調査し、日報や分報やブログにアウトプットする

    わからない部分について、わからない旨を具体的に表明する

    (Known unknowns を Known knowns にする作業)

  3. 要件を整理して提出物(Pull RequestやGistやスクショ)として具体化する

    (学習対象を Known knowns にしたと証明する作業)

data.wingarc.com

チーム開発に到達するまでは、本当にイヤというほどこれの繰り返しです。

そして、多くの受講生が何らかのプラクティスで詰まり、単純に物凄く時間がかかったりします。

そのような難所を攻略する方法はひとつだけです。

わかりたい対象をキーワードとしてたくさんググります。そのキーワードがちょっとでも入ってる本をたくさん買って読みます。片っ端から見てやるぞというイメージです。 とにかくそのキーワードが含まれている情報を浴びることを意識します。 そのキーワードについて様々な角度から書かれているものを見ているうちに共通点と差異からおぼろげながら輪郭が見えてくるはずです。

docs.komagata.org

クラピカが鎖について徹底的に調べたり触ったり匂いを嗅いだりするやつですね。

https://pbs.twimg.com/media/EsLOWhnUwAIl7ww?format=jpg&name=small

(きっとゴレイヌも…)

こういった経験を繰り返し積むことによって、卒業課題である自作サービス開発において外部APIや外部ライブラリを利用する際にドキュメントを読んだり、ReactやAWSといったプラクティス外の技術を採用するといったチャレンジを行うことが可能になります。

インプットとアウトプットのサイクルを回していくことは、仕事でも全く同じだと思います。

チーム開発

ラクティスについて語ったので、FBCにおけるチーム開発についても触れておきます。

チーム開発で受講生が触るリポジトリは以下になります。

github.com

このリポジトリの最大の特徴は、それまでユーザーとしてサービスを利用してきた受講生自身が主な開発者であることですが、ここではOSSでもあることに注目したいです。

このフィヨルドブートキャンプのサイト自体はオープンソースソフトウェアとして公開されています。また開発に使っているカンバンやPull Requestのやりとり、週次のふりかえりミーティング・見積もりミーティングの議事録も全てオープンになっているので、就職するときはその成果をそのまま面接官の方に見せることができます。

bootcamp.fjord.jp

筆者も就職活動時に、以下のURLを企業に共有しました。

github.com

OSSであることを利用して、これをしくみ化しているのは天才的だと思います。

また、チーム開発で積むことができる最も重要な経験はGitHub上のコミュニケーションに慣れることだと思います。

ひとつのIssueをこなすまでの流れを把握し、Pull RequestのDescriptionを丁寧に書き、他の受講生が書いたコードに対してレビューしたり、動作確認の依頼や完了の報告を行ったり、という経験を(かなりソフトに)叩き込まれます。就職する前に実務に最も近い経験ができて本当によかったですし、メンバーのみんなでひとつのサービスを成長させていく面白さも感じられました。

逆にチーム開発で全く面白味を感じられない場合は、エンジニアとして働いても辛い…というより、別の働き方があるかもしれません。

また、bootcampアプリ自体は筆者がFBCに参加した時点よりも高機能化する一方で、あとに参加すればするほど複雑化したコードを相手にすることになります。なので、プラクティス自体が難化傾向にあると言えます。

(実際の難易度はアサインされるIssue次第なので「難化傾向」です)

(すべてが肥大化する一方というわけではなく、機能が大きく削除されたこともあって、その際はサービスを運営するうえで非常に興味深い議論がなされました)

ラクティス以外の経験

スキルシートに記載するほどではないかもしれませんが、かといって確実に業務で役立つ様々な経験ができます。

たとえばエンジニアとして働くのであれば、フルリモートワークでもハイブリッド出社でも、Slackなどチャットツールでのテキストコミュニケーションに慣れておかなければいけません。ミーティングはGoogle Meet等のビデオチャットで行われることがほとんどでしょう。

そういったスキルは、輪読会、雑談会、モブプロ会、ミートアップといったイベントに参加することで、意識せずとも勝手に養われていきます。

(ちなみに、そういったイベントへの参加は卒業には必須ではありませんし、現職を続けながらFBCに参加している方には定期的なイベント参加自体が難しいです)

また、

  • 日報を書く
  • ブログ記事を書く
  • LTを行う

といったアウトプット経験も積むことができます。

独学でもできないことはないですが、「読んでくれる/聞いてくれる人が確実にいる」状態で、アウトプットのはじめの一歩を踏み出せる機会は稀だと思います。筆者がそうでした。

アドバイザーとして参加されている方や、ドリンクアップ(企業説明会)の参加者様や、地域Rubyコミュニティの方々など、メンター以外の現役エンジニアと話す機会も数多くあります。

個人的に、FBC参加は「Web業界ってどんな感じ?」「エンジニアってどんな仕事?」という疑問に対する解像度を上げていく経験になりました。お金を払ってWeb業界0社目に入社したようなものだと勝手に思っています。

就職

FBCで就職を希望する場合は

チーム開発に並行して就活の準備スタート

→ チーム開発卒業

→ 自作サービス開発

→ 本格的に就職活動スタート

という流れが一般的(2022年12月現在)ですが、筆者は

チーム開発に並行して就活の準備スタート

FBCから筆者の条件に合った企業を提示してもらう

→ ドリンクアップ(企業説明会イベント)に参加して、その企業から直接話を伺う

→ その企業からFBC経由でカジュアル面談 or 選考受けないか聞かれる

→ カジュアル面談受ける

→ チーム開発の段階で選考受けてOKの企業だった

→ 自作サービス終わる頃には存在を忘れられてるかもだし選考受けとこ

→ 通った😳

→ チーム開発卒業

→ 自作サービス

FBC卒業・就職

という感じでした。

再現性は低そうなので参考程度に。

「プログラミングに興味を持ったきっかけは?」という定番の質問に対しては「『ファイナルファンタジーXII』でプログラミングの原初体験をして〜」という切り口で、プログラミングのどこに興味を持ったかを説明しました。

xtech.nikkei.com

「なんでエンジニアになりたいんですか?」という質問に対しては

  • 在宅で仕事しやすそう
  • 年収も上がりやすそう
  • 知り合いのエンジニアが働いてて幸せそう
  • 単純に仕事がおもろそう

というフワッとした部分は正直に伝え、「単純に仕事がおもろそう」からプログラミングの話に切り替えて回答しました。

ちなみに、この定番質問は就職後もされました。

Webエンジニアとして1ヶ月働いてみて

入社1ヶ月のあいだ、仕事をしながら「FBC参加前の状態で現在のプロジェクトに参加していたら一体どうなっていただろう?」とたびたび想像していました。

最初のタスク

「リリーススピードを優先して_hoge.haml.htmlだけにハードコーディングしているコンテンツがあるんですが、そのコンテンツを各ページでも表示できるよう抽象化してください。」

これが筆者の最初のタスクでした。

(環境構築は置いといて)

コードベースがかなり巨大なので時間がかかりましたが、特有の慣れない挙動や歴史的経緯についての質問を重ねながらも何とか仕上げることができました。

「さすがにそれは事前に勉強してたらわかるやろ😡」みたいな質問はしなかったと思いますし、まる一日先輩に付きっきりで教えてもらうようなことはしませんでした。

僕の考える、Railsエンジニアとして就職できる最低レベルは、「少しでもプラスの戦力として計算できる」というものです。「Issueを一人でこなせる」といっても良いかもしれません。 …「教えるのに大量のパワーが割かれて、居ない方がプロジェクトが進む」という状態がマイナス戦力です。

docs.komagata.org

エンジニアとしてはまだまだですが、FBCを卒業した以上は自身をプラス戦力だと評価しています。

そして、FBC参加前の筆者はマイナス戦力だと断言できます

マイナス戦力状態の筆者が初タスクに挑戦したら…

  • そもそもタスクの要件が理解できない
  • IssueやPull Requestのスレッドの読み方がわからない
  • Hamlがよくわからない
  • Active Recordを操作できない
  • テストを書こうにもRSpecがわからない
  • RSpecがわかったとしてもテストの観点がない
  • それ以前に環境構築できない

などなど、パッと思いつくだけで大量の即死ポイントが見えてきました。

もうちょっとだけ会社の話

現在筆者はジュニアエンジニアの育成を主な目的としたOJT部署に所属しており、特定のプロジェクトのタスクに取り組んでいます。そのOJT部署のチャンネルで日報を投稿し、技術的な質問や困ったことを表明します。

初日の終わりがけに速攻で分報チャンネルを作成しました。

また、現在のプロジェクトのチームの雰囲気や環境はとてもよいと感じています。

  • Slackのチャンネルにピン留めされているGoogle Meetで各自作業
  • Google Meetを繋ぎっぱなしにする義務はない
  • そのGoogle Meetで作業してると、朝会や定例ミーティングがぬるりと始まる
  • 技術の話で盛り上がる
  • 映画の話で盛り上がる
  • ゲームの話で盛り上がる

Google Meet繋ぎっぱなし」は常設のもくもく会を毎日やっている感じで、挙手機能があることも後押しし、同期的な質問のハードルが非常に低いです。気分転換に軽い雑談もしやすいので、リモートワークの孤独感はかなり薄いです。

質問のための情報を整理する前に、分報でウンウンうめいている段階で逆に声をかけられて、疑問を瞬殺されるという経験を何度もしました。

どういう経緯で何から影響を受けて成立したのかはまだ存じ上げませんが、チームに「Google Meet繋ぎっぱなし」カルチャーがあることは新人として非常にありがたかったです。

特にくふうを凝らさなくても、自分が助けを求めやすく、周りが自分を助けやすい環境があったのは幸運でした。そのおかげで「今日はぜんぜん進捗がなくてつらい…」みたいな事態には直面しておりません。

少しでも速くエンジニアとして成長することが、この恵まれた環境やチームへの恩返しなのかなと思っています。

とっても参考になるよ

フィヨルドブートキャンプについては色々な方が書かれているので、ぜひ参考にしてください。

明日はfuwa-syugyoさんの記事です。どうぞお楽しみに。

【書評】『プロを目指す人のためのRuby入門 改訂2版』&チェリー本輪読会番外編

こんにちは、チェリー本のおかげでRubyチョットワカルいっしーです。

今回はRuby 3.0に対応した『プロを目指す人のためのRuby入門 改訂2版』(通称チェリー本2)を少しずつ読み進めています。また、本書に登場するサンプルコードに手を加えたものも少しだけご紹介します。

※【書評】と銘打ってますが、『改訂2版』については隅から隅まで精読できておりませんすみません🙏

チェリー本のよいところ

初心者におすすめ

Ruby初心者のみならず、プログラミング初心者にとてもおすすめできます。筆者は本書の第1版を、1周目は通読し、2周目は輪読会に参加して数ヶ月かけて読み込みましたが、そのおかげでプログラミングの地力が相当ついたと思います

フィヨルドブートキャンプ内で開催されたチェリー本輪読会についてはコチラ↓

isshi-hasegawa.hatenablog.com

「プログラミングの地力がついた」というのはちょっとフワッとした表現ですね。もう少し具体的に述べると、未知のコード(Ruby以外の言語でも)に出会った時に、どれがキーワードで、どれがレシーバで、どれが引数で、コード全体の構造がどのようになっているかなどを冷静に観察できるようになりました。

説明文もコードも読みやすい

入門書として何より大事ですが、説明文が読みやすい日本語で書かれています。また、サンプルコード中に書かれているコメントも過不足なく、そのコードで何が起きているのか理解しやすくなっています。

Rubyを体系的に学べる

「こういう書き方は避けてこのように書くほうが良い」 「こういう書き方は不具合の原因になります」 というふうに、「何が大事で、どのように書くべきか」がキッチリ監修されています。

ただ単にRubyの仕様が知りたいのなら公式リファレンスなどを黙々と読めばよいですが、本書なら伊藤さんというフィルターを通し、Rubyをトピックごとに体系的に学ぶことが出来ます。

テスト駆動開発を実践できる

要件を満たすコードを書く際にどのようなアプローチをとればよいかを手軽に学べます。

例題に取り掛かるセクションでは、

  1. テストコードを記述する
  2. 実装する
  3. テストが通るのを確認する
  4. リファクタリングする
  5. テストが通るのを確認する

というのが基本的な流れになっています。

まるで本書を通じて伊藤さんとペアプロしてるかのような体験です。

読んでいるうちに感じた疑問は、少し先を読めばだいたい書いています。

チェリー本輪読会番外編

フィヨルドブートキャンプでは、早速この改訂版を手に入れた現役生で「チェリー本輪読会番外編」が開催されており、筆者も参加しています。フィヨルドブートキャンプ内で5〜9月に開催されたチェリー本輪読会の、文字通り番外編的なものです。

例題がリニューアルされた8章(モジュール)と、新設された11章(パターンマッチ)をみんなで読もうという趣旨で行っています。

リニューアルされた8章の例題:rainbowメソッド

8章の例題がリニューアルされ、ターミナル上で文字色を変更して出力できるプログラムを作成するというものになっています。

完成品はこんな感じ。 ruby-book_–_rainbowable_rb.png

ANSIエスケープシーケンスという出力形式を利用して、文字色を変更しています。

他にも、背景色を変更したり下線を引いたりすることもできるようです。

ANSI_escape_code_-_Wikipedia.png

輪読会のみんなで改造

せっかくなので、輪読会のみんなと一緒に手を加えてみました。 要件は以下のとおりです。

  1. 背景色も変更される
  2. 色変更の順番は固定でなくランダム
def rainbow
    to_s.each_char.map.with_index do |char, count|
      color = 31 + (0..5).to_a.sample % 6
      bg_color = 41 + (0..5).to_a.sample % 6
      "\e[#{color};#{bg_color}m#{char}"
    end.join + "\e[0m"
  end

おっと、RubyMine(IDE)にペーストしたコードの方はRuboCopに色々怒られています。

ruby-book_–_rainbowable_rb.png

それに、文字色と背景色が被ってしまうと文字が見えませんね。

ruby-book_–_rainbowable_rb.png

もう少し改造

  1. 文字色と背景色が被らないようにする
  2. RuboCopを通す(Warningも対応する)
def rainbow
    to_s.each_char.map do |char|
      ary = (0..5).to_a.sample(2)
      fg_num = 31 + ary[0]
      bg_num = 41 + ary[1]
      "\e[#{fg_num};#{bg_num}m#{char}"
    end.join.concat "\e[0m"
  end

これで完成したと思いきや、被っているように表示されてしまいました。 ruby-book_–_rainbowable_rb.png

どうやらIDEのカラースキームの影響のようです。

プラグインの適用を外すと、うまくいきましたね。 ruby-book_–_rainbowable_rb.png

ちなみにiTerm2ではこんな感じ。問題なく動作しています。 1__irb.png

その他の改訂部分について

もちろん、8章と11章以外の改訂部分も、より表現がわかりやすくブラッシュアップされています。

書籍全体を通しての詳細な差異はシモカワさんの書評を参考にさせてもらってます。

めちゃくちゃ詳しいです↓

aim2bpg.com

また、フィヨルドブートキャンプ卒業生のふーがさんがこの度主催される輪読会メインのコミュニティ「りんどく.rb」でも改訂版の輪読会が企画されています。

詳細はコチラ↓

fuga-ch85.hatenablog.com

チェリー本2はこれから何度も読書会の機会がありそうですね。

映画のディレクターズ・カット版を観るように、差分を楽しみながら他の部分も読みたいと思います。

達人プログラマー輪読会をはじめた話

こんにちは、プログラミング学習をサボって映画ばかり観ているいっしーです。今年は新作・旧作問わず400本ほど観てました。コロナ禍以降ペースが激増しています。

さて、筆者はフィヨルドブートキャンプ内で達人プログラマー輪読会を主催しています。今回は輪読会を主催した経緯や、「輪読会始めてみよう」という話をします。

51W3GJV1X-L.jpg

この記事は、フィヨルドブートキャンプ Part 1 Advent Calendar 2021の9日目の記事として書いています。

Part2はこちらです↓

フィヨルドブートキャンプ Part 2 Advent Calendar 2021

『達人プログラマー』とは何か

あらゆる書籍・ブログ・講演etcで引用されているとてもスゴイ本(語彙力)です。

www.amazon.co.jp

どれほどスゴイかというと、この本の中で提唱された原則や概念、習慣や姿勢は業界で有名になりすぎて、この書籍で提唱されたこと自体忘れられてしまうということが起きています。例えば「プログラマーは毎年1つは新たな言語を学ぼう」という姿勢について書かれていますが、この姿勢のことは覚えていても出典を覚えていなかったケースに2例遭遇しました。どちらも十数年以上前に第1版を読まれたベテランの方でした。

『達人プログラマー』についてより詳しくはコチラ

達人プログラマー 熟達に向けたあなたの旅(第2版)【委託】 - 達人出版会

10年のキャリアを生成する仕事の全体像 - 角谷HTML化計画(2012-11-08)

達人プログラマー 第2版はいいぞ

どこで『達人プログラマー』を知ったのか

角谷さんのFjord Boot Camp as a Gate(角谷トーク2020)で達人プログラマー第1版から聖堂のくだりが引用されていたので、おそらくこの時だと思います。

どうして『達人プログラマー』を買ったのか

銀座Rails#34でt_wadaさんの講演を聞き、興奮冷めやらぬうちに第2版を購入しました。積ん読になるだろうと予想していましたし、実際輪読会を始めるまでは積ん読状態でした。しかし「どうせいつか読むだろう」とも思っていたので微塵も後悔していませんでした。

ちなみに、この講演を聞いた直後の筆者の感想がDiscordに残っていました。

isshi🎬🎥🍿_-_Discord.png

なんだこの感想は…

どうして輪読会を始めようと思ったか

筆者はこれまでいくつかの輪読会(チェリー本、オブジェクト指向でなぜつくるのか等々)に参加する中で、「自分で輪読会を主催すれば、ある程度自分でコントロールできそうな会が作れそう」と考えるようになりました。もちろん、他の参加者に嫌な思いをさせたり不都合を押し付けたりしない範囲で。

チェリー本輪読会に参加した感想はこちら↓

isshi-hasegawa.hatenablog.com

輪読会を始めるきっかけを欲していたところ、アドカレPart1の7日目を執筆されたpofkumaさんが『達人プログラマー』を入手したというツイートに反応して、実際に輪読会をスタートさせるための行動に移りました。

輪読会を始めるために何をやったのか

開催企画を宣伝した

とりあえずDiscordの#randomチャンネルで開催の旨を宣伝しました。 こんな感じ。

random_-_Discord.png

オリエンテーション(第0回)を開催した

  • 毎週何曜日の何時に開催するか?
  • 予習はありかなしか?
  • 参加したい人は自分やpofkumaさんの他にどの程度いるか?

などを決定するために、オリエンテーションを開催する必要がありました。

調整さんを使ってオリエンテーションの日程調整を行いましたが、記入したのは筆者とpofkumaさんの2名のみ🥲 『達人プログラマー』はプラクティスに直接関係のない書籍なので、集まりが悪いのは仕方ありません。

『達人プログラマー』輪読会オリエンテーション___調整さん.png

しかし、オリエンテーションには5名ほど集まってくれました。主催する側としても、「行けたら行く」なノリで参加してもらうほうが気楽だと後から思いました。

まとめページを用意した

HackMDというフィヨルドブートキャンプでよく利用されているMarkdownエディタでまとめページを用意しました。

現在はこんな感じ↓

達人プログラマー輪読会_ノートまとめ_-_HackMD.png

Q&Aに質問を投稿した

フィヨルドブートキャンプのbootcampアプリには質問を投稿できる機能があります。 ※bootcampアプリにアカウントを持っていないと閲覧・投稿・回答はできません。

『達人プログラマー』を輪読会で取り扱うにあたって、読み方などアドバイスをくだ___FJORD_BOOT_CAMP(フィヨルドブートキャンプ).png

質問内容は技術的なものに限らないので、このような質問も可能です。

しかしこの質問にはなかなか回答が付かなかったので、Fukuoka.rbというRubyの地域コミュニティに参加した折にこの件を質問してみたところ、ある方に『達人プログラマー』についてアツく語ってもらえました!しかもその方はフィヨルドブートキャンプのアドバイザーでもあったので、質問にも回答いただけました。

この回答は、業務未経験の立場で『達人プログラマー』を読む際のとてもよい指標になっています。あらためて感謝申し上げます。どんな回答か見てみたい方は、何らかの方法でフィヨルドブートキャンプに参加してみてください。

会場を用意した

Discordのスレッド機能を使って、達人プログラマー専用のテキストチャンネルを用意しました。

達人プログラマー_-_Discord.png

達人プログラマー輪読会用のロールを作成した

フィヨルドブートキャンプのDiscordサーバーでは、@unstoppa61eさんが製作されたマッチングアプリ🧩Botが利用できます。

以下のようにロールを作成し、参加を検討している方に✅を押すよう通知しました。

ロール作成・登録_-_Discord.png

こうすることでrole_達人プログラマー輪読会というロールが付与され、メンションを飛ばすのが楽になります。

達人プログラマー_-_Discord.png

「開催中の輪読会リスト」を更新した

概要が固まった段階で、「開催中の輪読会リスト」というbootcampアプリ内のDocsを更新しました。

開催中の輪読会リスト___FJORD_BOOT_CAMP(フィヨルドブートキャンプ).png

どのように開催しているのか

概要は上記のとおりです。ちょっと特殊で、主催の筆者のみ予習必須としています。

「達人プログラマー輪読会」という名前ですが、実際の進行は輪読会形式ではなく、HackMDに事前に記入しておいた内容を読んだり、それについて参加者同士で話し合ったりしています。

要するに、参加者は予習しなくても(主に)筆者がまとめた該当範囲の要約を聞くだけの参加も可能ということにしています。プラクティスに直接関係しない書籍なので、できるだけ気軽に参加しやすいように、このような形式にしました。

主催である筆者は毎週予習しなければいけませんが、そこまで負担にならないように調整しています。例えば今週末(12/11)はお休みにしています。この記事の作成をじっくり行いたかったのと、プラクティスに充てる時間を確保したかったからです。

よかったこと

『達人プログラマー』を読んでも大丈夫だとわかった

『達人プログラマー』を読む際は、業務経験があるに越したことはないです。抽象的な内容が含まれているので、「具体例はこんな感じかな?」と想像しながら読まざるを得ない箇所が多いですが、面白いエピソードが盛りだくさんで、結構笑いながら読めます。

輪読会が雑談の場になった

毎回、該当範囲を読み終えた後は次回の日程と範囲を決定し、ダラダラと満足行くまで雑談しています。お互いの近況やプラクティスの進み具合、就職活動の話、映画の話(主に筆者)、政治の話(主に筆者)、経済の話(主に筆者)などなど…。好き放題喋り倒すとストレス解消になるので輪読会の場でおしゃべりするのは好きです。

フィヨルドブートキャンプに繋ぎ止めてくれる場になった

筆者は唐突にプラクティスの進捗が悪くなってチャット上での活動も途絶えることがあります。かなり極端ですが、いきなり何もかもやる気を失います。つい先日まで2週間ほどそのような状態でしたが、自分で始めた輪読会の開催だけは必ず行っていました。不思議とそのやる気だけは継続していました。

この経験から、輪読会を開催することでフィヨルドブートキャンプに参加し続ける価値を自ら創ったのだと気づきました。たとえ本来のプラクティスの進捗がなくとも、「達人プログラマーを読み切る」という自分で作ったプラクティスを他の受講生と協力して取り組んでいるようなものです。誰かに命令されたり課されたわけではありません。ゲームの遊び方を自分で見つけたような感じです。

輪読会を主催してみたいあなたへ

輪読会を始めてみたい方は、既に開催されているなんらかの輪読会に一度参加してみて、大体どんな感じで進行しているのか知っておくといいと思います。あとは自分の読みたい本を見つけて輪読会を開催するきっかけを作るだけです。既に開催されている、あるいは過去に開催された会と書籍が被ってもまったく問題ありません。チェリー本の輪読会なんかは常時2~3の輪読会が開催されていてもいいと思ってます。学ぶやる気に溢れている人たちがいて、会場も用意されている。勉強会・読書会・輪読会を行うプラットフォームとしても、フィヨルドブートキャンプはとても良い環境だと思います。

ただし、輪読会を運営すること自体が重荷になってしまっては本末転倒です。主催することになっても、無理のない範囲で、ほどほどの負担になるよう調整してください。

最後に

というわけで、達人プログラマー輪読会にぜひお気軽にご参加ください。あなたがより良いプログラマーを目指していても目指してなくも大丈夫です。雑談だけ遊びに来てもらっても全然オッケーです。フィヨルドブートキャンプのDiscordサーバにいる人なら誰でも歓迎です。お待ちしています。

明日以降もフィヨルドブートキャンプのAdvent Calendarはまだまだ続きますので、引き続きお楽しみください。

チェリー本輪読会を完走した感想

筆者が参加していた「チェリー本輪読会」が先日最終回を迎えました。輪読会初完走の感想などを残しておきます。

チェリー本輪読会とは?

フィヨルドブートキャンプ(以下FBC)内で5月半ば~9月半ばの約4ヶ月間に渡って開催された輪読会です。『プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで』(通称チェリー本)を取り扱っていました。

筆者を含め「チェリー本を一周したが理解が浅いのでより深く理解したい」というメンバーが集い、以下の目標が掲げられました。

  • 学習を楽しむこと
  • Rubyを深く知ること
  • ゆるく続けること

土日除く平日の毎朝9時より1時間(週5時間→後に6時間)というなかなかにハードな開催形式でしたが、筆者はなんとか皆勤で終えることができました。全84回のうち30回くらいは開始5分前に起きましたが、意地でも皆勤を維持しました。

筆者が輪読会に参加した理由

筆者は輪読会発足時にちょうどチェリー本を読むプラクティスに差し掛かったところでした。FBC参加前にチェリー本を一周していたので「どうせ読み直すなら輪読会で徹底的にやろう」と思い参加を決めました。

ちなみに、FBCの学習内容(プラクティス)はこちらで公開されています。

bootcamp.fjord.jp

よかったこと

よかったことは数え切れないほどありますが、いくつかご紹介します。

全然わかっていなかったことがわかった

筆者はFBC参加前に、以下の動画を参考にして、飛ばし読みしながらチェリー本を一周しました。

www.youtube.com

輪読会を完走した今となっては、チェリー本の半分も理解しないまま一周していたことがわかりました。

チェリー本は以下のような構成になっており、後半の章は前半の章の理解を前提として解説されています。

  • 第1章 本書を読み進める前に
  • 第2章 Rubyの基礎を理解する
  • 第3章 テストを自動化する
  • 第4章 配列や繰り返し処理を理解する
  • 第5章 ハッシュやシンボルを理解する
  • 第6章 正規表現を理解する
  • 第7章 クラスの作成を理解する
  • 第8章 モジュールを理解する
  • 第9章 例外処理を理解する
  • 第10章 yieldとProcを理解する
  • 第11章 Rubyデバッグ技法を身につける
  • 第12章 Rubyに関するその他のトピック
  • 付録 Ruby on Railsの習得に向けた予備知識

特に2,4,5章の理解が浅いとその後のすべての章に影響します。3章がわからないと、その後のすべての例題で何をやっているのかわかりません。

どんなに難しいコードでも、1行1行読んで何を入出力しているか追っていけば理解できるものです。しかし、1,2行目から理解できず、目が滑ってしまい、ついにはその段落ごと・項目ごと飛ばし読みしてしまう…という流れにはまり込んでいたようです。

モブプロ・irbの操作に慣れた

輪読会では、毎回ドライバーをくじ引きで決め、チェリー本のサンプルコードを実行する様子を画面共有するというモブプロ形式で進行していたので、試してみたいコードをドライバーに指示して実行してもらい、そこから新たな気づきを得るという経験を何度もしました。irbやターミナルの見やすさにこだわるようにもなり、雑談タイムにはおすすめのプロンプトや拡張の情報が飛び交いました。

starship.rs

github.com

一次情報を参照するようになった

未知のメソッドやキーワードを発見すると、すぐにるりまを見てirbなどで挙動を確認する癖が付きました。一次情報を確認する癖は、他の言語や技術の学習でも大事だと思います。

輪読会の最初の頃は、るりまを読むのに苦労していました。しかし何度も参照しているうちに慣れてきて、「どの箇所に知りたい情報が記載されているか」がわかるようになってきました。

下記のような無料書籍があるので、Ruby学習中でるりまに慣れていない方はぜひご一読ください(これまた伊藤さんのZenn書籍です)。体系的にまとめられた導入の存在はめちゃめちゃありがたいです。

zenn.dev

音声通話によるコミュニケーションに慣れた

チェリー本輪読会はFBCのDiscordというチャットツールのサーバ上にある音声チャンネルで行われていました。下の画像のような感じで、音声チャンネルに入った参加者が口頭でコミュニケーションします。

これは音声チャンネル「もくもく部屋」内でBotとふたりきりの筆者 f:id:isshi-hasegawa:20210920175036p:plain

FBCは完全オンライン・自習形式であるため、「誰とも関わらず黙々とプラクティスを進める」ということが起こりがちだったようですが、チェリー本輪読会以後は加速度的にDiscord内でコミュニケーションが活発化していきました。

これはDiscordで輪読会を開催した副次的な効果ですが、参加者一覧が外部からも見えるため、メンター・卒業生がふらっと参加してくださり、我々現役生の疑問を解決するといったことが頻発しました。ふらっとどころか皆勤で解説してくださった方もいらっしゃいました。

しかも、最終回は著者直々にあとがきを音読するというレアイベントが…!なんだこれ…!

また、通信環境の改善について話し合ったり、オンライン独特の会話のテンポに慣れたりと、リモートワークの練習をしているようでもありました。

www.obregonia1.com

読書のハードルが下がった

筆者は本を読むのがまあまあ苦手です。FBCでの書籍を読むプラクティスでは、自分で期限を設けてもダラダラと読んでしまいます。

「苦手」の程度はさておき、筆者はチェリー本輪読会以後発足したいくつかの輪読会にも参加するようになり、輪読会の開催をモチベーションにして読書をする輪読会駆動読書(?)を行うようになりました。

予習が不要なら輪読会内で読めばよいだけです。予習が必要なら、対象範囲のみを期限までに読めば良いです。「とりあえず今週はこの章だけ読めばいい」とゴールがはっきりしているので、短距離走のように本が読めます。

朝起きられるようになった

どれだけ夜ふかししていても、輪読会のために必ず起きるようになりました。毎日輪読会開催というのは少々特殊な例だと思いますが、無職の筆者にとっては一日のリズムを作る助けになってくれました。しかし筆者は朝型になったり夜型になったり、頻繁に体内時計が狂うので徹夜で参加したことも何度か…。

輪読会が始まってから終わるまでのプロセスを知った

  • 主催にはドキュメント・通知文作成や日程調整といった作業が付随的に発生する
  • 振り返り会を行ってKPTを洗い出し、問題点を共有して解決すると捗る
  • FBCには「輪読会やります」と手を上げれば、自然と集まってくる土壌がある

輪読会を完走したことで、輪読会運営のノウハウ的なものを知れました。「案外なんとかなるかも?読みたい本があれば自分も輪読会やってみよう」と思えるようになりました。

seleck.cc

仲間ができた

何より素晴らしかったのが、仲間ができたことです。初めこそお互い緊張していましたが、彼らと100時間近く一緒に過ごしたことで、気心の知れる仲間となりました。ワイワイ冗談を言い合いながら学習するのはめちゃめちゃ楽しかったです。オンラインで飲み会や打ち上げと称して学習に関係ない話題でも盛り上がりました。

よくなかったこと

よくなかったことは特にありませんでした。

人によっては「時間がかかる」「自分のペースで進められない」「難易度が自分に合っていない」など感じられたかもしれません。

チェリー本改訂版について

2021年9月現在チェリー本の改訂版が制作されています。輪読会で発見した誤字等を他のメンバーが伊藤さんに報告してくれたので、改訂版にいくらか貢献できたと思われます。改訂版の情報については、こちらを御覧ください。

blog.jnito.com

「プロを目指す人のためのRuby入門(通称・チェリー本)」の改訂版を制作中です。 第1版を一通り読んだという人も、改訂版を読んでいただくことで次のようなメリットが得られます。

  • 最新のRubyの言語仕様を一通り把握できる
  • とくに、パターンマッチについて詳しく学習できる
  • 内容によっては第1版の説明を書き直した部分もあるため、より深い理解を得られる
  • 再読することで、すでに忘れてしまっているRubyに関する知識をあらためて覚え直すことができる

とのことです。

改訂版が発売されたらRubyの復習を兼ねて、第1版との変更点を意識した輪読会…など面白そうです。

すでにプログラミング学習を開始している場合、改訂版の発売を待つ必要はないので現行の第1版を読みましょう。Ruby 2.5以上との差分について書かれた激厚サポートQiita記事を参照すれば問題ありません。

blog.jnito.comqiita.com

最後に

現在はチェリー本輪読会同じ時間帯に同じタイムスケジュールで行われている「現場Rails輪読会」に参加しています。『現場で使える Ruby on Rails 5速習実践ガイド』(通称現場Rails)を取り扱う輪読会です。

チェリー本を読み終えて解散、ではありません。だいたい同じだけど、また新たなメンバーを加えて再出発しました。チェリー本輪読会で学んだRubyのことも、Ruby以外のことも、すべてを礎にして、これからも楽しんで学習を続けていきます。

伊藤さん

チェリー本を通じて、Rubyに対する考え方・コードの読み方がまるで変わりました。

今後何度も読み返すのは改訂版になると思いますが、第1版での経験は自分にとって忘れられないものになりそうです。

ありがとうございます!

主催の@eatplaynap329さん

輪読会メンバーの皆さん&森塚さん

おかげさまで楽しく学習できました!ここまでありがとうございました〜!

これからも、ひとつよろしく😁

初めてLT会で登壇しました

2021年8月7日(土)に、フィヨルドブートキャンプで「初めてのLT会 Vol.8」というLT会に登壇しましたので、その準備や感想などを書き残しておきます。実際に発表に使ったスライドはこちらです。

「初めてのLT会」とは?

フィヨルドブートキャンプで2~3ヶ月に1回開催されているオンラインLT会で、これまで主催・登壇ともに現役受講生が行なっています。「初めての」と銘打っているとおり、LTに初挑戦する現役生が登壇します。卒業生やメンターが登壇できるのかは不明ですが、今回6名の登壇枠は募集開始から半日も経たないうちに埋まってしまいましたので、あまり考慮しなくてもよさそうです。

フィヨルドブートキャンプはプログラミングスクールであると同時に、HRT精神溢れるコミュニティです。つまり、みんな優しくあったかいコメントをくれます。こういうコミュニティ内のクローズドな環境でLTに初挑戦できるというのは絶好の機会なので、チャンスがあれば参加してよいと思います。筆者も後先考えずに参加申し込みをしました。発表駆動(?)というやつです。

blog.toshimaru.net

そもそもLTとは?

LT(エルティー)はLightning Talkの略で、Lightningは「稲妻」という意味。 5分程度の短いプレゼンのことで、短いこと以外基本的にルールはありません。

「初めてのLT会」では、そこまで厳密ではありませんが、発表と質問タイム合わせて5~10分が1人あたりの持ち時間となっています。

準備

発表のテーマ決め

LT会全体のテーマは『発見』でした。

解釈次第で柔軟に自分の発表テーマに繋げられるので色々迷いましたが、最終的には「フィヨルドブートキャンプに参加してから発見した新たな自分」に落ち着きました。正直、技術的なことについて語るには自信も時間もなかったので、とりあえず自分のことについて語るのが一番やりやすいと思ってこのテーマにしました。

原稿を書く

自分の持っている知識や経験から、聞き手が聞きたいことを洗い出すことからはじめました。そこから使えそうなネタや伝えたいことを取捨選択し、以下のように、VS Codeに原稿として書き出しました。Markdownの見出しがそのままスライド1枚という体で書きましたが、スライド作成時には2枚以上に分割することも見出しごと削除することもありました。

f:id:isshi-hasegawa:20210810200245p:plain

自分の経験を語るにしても、独りよがりになりすぎない&共感を呼ぶ内容にしたかったので、ちょうどよいさじ加減が難しかったですが、とてもいい経験になりました。今回はリハーサルで好感触を得られたので、大きく内容を見直しせずにすみました。

スライドを作成する

使い慣れていたこともあり、Googleスライドで作成しました。フィヨルドブートキャンプではKeynoteの方が主流なようです。ノウハウも蓄積されているのでどちらでも良いと思いますが、Googleスライドでスライドを作成するメリットを今回たまたま発見しました。

スライド作成画面の右下のボタンを押すと、「データ探索」という機能が使えます。テキストと画像を適当に配置するだけで、いい感じのレイアウトをAIが作成してくれます。時間に追われていたうえ、ズボラすぎる筆者には最高な機能でした。

f:id:isshi-hasegawa:20210811000120p:plain

f:id:isshi-hasegawa:20210811000508p:plain

あと、最大限文字をデカく、かつ変なところで折返していないかに注意しました。スライドに記述する文字は最小限に留め、詳細は原稿を読んでいけばいいんじゃないかなと、なんとなく想定していました。

ちなみに、デザインテーマはデフォルトのものから気に入った配色のものを適当にピックアップしました。適当に選びすぎて名前も覚えていません。挿絵はいらすとやに頼りました。公式サイトよりも、以下のいらすとや検索に助けられました。

irasutoya-sear.ch

練習する

2回のリハを終え、あとはひたすら練習するのみです。練習しているうちに原稿の内容を覚えてきたので、スライドのみで発表できるようになっていました。

普段はリビングで学習しているのですが、妻がいる隣で練習するのがすこし気恥ずかしかったので、風呂場にスマホを持ちこんで練習していました。GoogleスライドだとGoogleドライブのスマホ用アプリから作成したスライドを確認できるので助かりました。

Speaker Deckに発表資料をアップロードする

Speaker Deckに発表資料をアップロードする際、PDFに書き出してアップロードする必要があります。手順についてはこちらが参考になります。

masuyama13.hatenablog.com

また、Googleスライドの場合の注意点を探してみると、以下のQiita記事を見つけました。

qiita.com

そのままスライドをPDFにするとフォントが崩れるので一度pptxでダウンロードします。 その後パワーポイントで開いてPDFで出力するとフォント崩れがおきません(多少は元のスライドとは変わるけど)。 ※PDFエクスポートだけならライセンスは不要です

他の発表者に聞いたところ、フォントが崩れる問題はGoogleスライド・Keynote共通なようです。Mac App StorePowerPointアプリをインストールしておくとよいでしょう。

Microsoft PowerPoint

Microsoft PowerPoint

apps.apple.com

本番

思ったより緊張しました。そのせいか、壇上に上がった直後に誤ってRemoを開いているChromeのタブを閉じてしまって尋常じゃなく焦りました。逃げ出したくなったわけではないです。あと、トリというのも結構しんどかったです。肩の荷がおりない状態で他の方の発表を見守るのも楽ではありませんでした。あみだくじめ…

アイスブレイク狙いで背景に本棚を映り込ませました。漫画でぎっしり埋まった本棚を全部写すとドン引きされると思ったので、Blu-rayを収納している本棚の一角だけ写すようカメラの位置を調整しました。

LTのタイトルについて

先日、『2001年宇宙の旅』ウォッチパーティが開催されてn回目の鑑賞をしたので、これにちなんでLTのタイトルをつけました。

www.dommune.com

初見の方は睡眠導入用にぜひどうぞ。大体いつでもNetflixAmazon Primeで見放題です。

www.youtube.com

「映画のタイトルをもじる」のは、@eatplaynap329さんのアイデアを拝借しました。

eatplaynap329.hatenablog.jp

細かい話をいうと、ホメロスのオデュッセイアは「行って帰ってくる話」なので、旅の途中で「オデッセイ」と銘打つのは変な話なんです。ただ、『2001年宇宙の旅』というタイトルだけは広く知られているでしょうし、原題のかっこよさは不朽のものなのでヨシとしました。ちなみに、全世界のあらゆる「行って帰ってくる話」は、オデュッセイアの物語構造が根幹になっています。

LTで紹介した映画について

どれも近年の傑作です。ぜひご覧になってみてください。

桐島、部活やめるってよ

www.youtube.com

吉田大八監督の『桐島、部活やめるってよ』(2012)は群像劇モノの青春映画です。

主人公の神木くんはスクールカースト最底辺でのオタクで、クラスメイトから馬鹿にされていますが、学校内でゾンビ映画を撮っているという素晴らしい役です。思春期特有の同調圧力の息苦しい感じがあまりにもリアルで、大変見どころです。

愛がなんだ

www.youtube.com

今泉力哉監督『愛がなんだ』(2019)は岸井ゆきの成田凌主演の恋愛ドラマです。

岸井ゆきの扮する主人公はマモちゃんという男のことが大好きで、尽くして尽くして尽くしまくるのですが、無下にされてひどい扱いを受けます。それでもマモちゃんを追いかけ続けるというお話です。ところでこのマモちゃんという男は、どうやら顔面が成田凌だということ以外に何の魅力もないようなのです。なぜ主人公がマモちゃんのことが大好きなのかは観客にとっては謎なので、一種のミステリ映画のようにもなっています。

ソウルフル・ワールド

www.youtube.com

ピート・ドクター監督『ソウルフル・ワールド』(2020)は、ディズニー・ピクサーのアニメーション作品です。

仕方なく小学校の音楽教師をしていた主人公が、念願のジャズミュージシャンになるという夢が叶う直前に事故で瀕死になってしまいます。彼は死後の世界ならぬ「生前の世界」に迷い込み、人生を始めることを拒み続ける「22番」を説得するという話です。ピクサー作品ですが、子供が観てもサッパリわからない作品だと思います。

まとめ

参加申込から発表まで随分時間があったのですが、「そろそろLTの準備しなきゃな〜」とは思いつつ幾星霜、結局作業を開始したのは本番の一週間前でした。原稿に2~3日、スライド作成はほとんど一晩で仕上げました。ウダウダしてたり体調崩したりしていたとはいえ、追い込まれて火がつくにしても遅いです。さらに、夜のほうが作業が捗るので一定に保っていた生活リズムが壊れてしまいました。さらに1週間以上日報を書いていません。そろそろ軌道修正しないとヤバいです。

ですが、LT会に登壇して本当によかったと思います。発表後に頂いた感想も大変うれしく、これからの励みになります。定期的に見返してニヤニヤしようと思います。また次に発表する機会があれば、何か製作物を用意して技術LTをしてみたいです。

発表する「場」も「人」もいなければLTは成り立ちませんので、皆さんへの感謝は尽きません。ありがとうございました。

ポモドーロでもくもくしてたらフィヨルドブートキャンプにチャンネルができちゃった話

映画、観てますか? フィヨルドブートキャンプで学習中のいっしーです。

最近、Twitterの映画界隈を賑わせたニュースにあやかってブログタイトルをつけました。

参考:「元カレとセスナに乗ったらパイロットが死んじゃった話」が権利元の誤認識で改題 新邦題は? : 映画ニュース - 映画.com

こういう邦題ってたぶん初の試みなので、配信・ソフト版リリース時に改題されるかどうか、結構注目しています。

さて、フィヨルドブートキャンプのDiscordサーバーに「ポモドーロもくもく会」が発足したので、その経緯や運用についてまとめました。主にフィヨルドブートキャンプ現役生向けの記事です。

もくもく会の発足

フィヨルドブートキャンプでは、有志でチェリー本(プロを目指す人のためのRuby入門)輪読会を行っています。平日の9:00~10:00というハイペースで開催されているため、メンバー同士が仲良くなるのもあっという間でした。

筆者が参加している輪読会の開催後に、メンバーと一緒に勉強や雑談をしたいな〜と思って「このまま輪読会チャンネルに残ってもくもく会やりませんか?」と呼びかけたことがもくもく会の発足のきっかけです。

ポモドーロとは

この呼びかけに応じてくれた @yatsuhashi さんが、YouTubeポモドーロタイマー動画を使って時間を計測したいと申し出てくれました。

ポモドーロ・テクニックとは、有名な時間管理術のひとつです。25分の作業と5分休息で作業時間と休息時間を分割し、1セットを「ポモドーロ」と呼びます。

イタリアの作家フランチェスコ・シリロにより考案されました。彼は学生時代に、トマト型のキッチンタイマーを使用していたので、この時間管理術をPomodoro(イタリア語で「トマト」)と名付けたそうです。

Toggl Trackという時間管理アプリのSettingsにも、Pomodoroモードが用意されています。筆者は以前、このモードを使っていたことがあるのですが、学習時間の総量の計測のみに用途を絞ってからは使っていませんでした。

チャンネル設立まで

後述しますが、上記のポモドーロもくもく会フィヨルドブートキャンプ内で行うのはとても良い効果が見られました。しかし同時に、

  • 輪読会チャンネルで、チャンネルの本来の用途ではないもくもく会を長時間やってていいのか?
  • @yatsuhashiさんの口頭アラームに頼っているので自動化できないか?

といった疑問が浮かびました。

そこで@yana-gi さんがDiscordサーバー内に「#もくもく会🍅」を作ってくれました。おかげで、いつでも誰でもひとりでも、チャンネルに入ればもくもく会を開けます。

さらに@Aseiideさんが自動でポモドーロできるようにPomomoというDiscord Botを選定してくれました。Pomomoはとても便利で、pom!startコマンドで作業時間25分+休憩時間5分のタイミングを自動で通知してくれます。4ポモドーロ目は15分の長い休憩が挟まれます。これはデフォルト設定なので、カスタマイズも可能なようです。まだそこまで使い込んでいませんが、トマトちゃんみたいなアイコンもかわいいし、結構よさそうなBotです。

そしてなんと!お気づきかもしれませんが、筆者は発起した以降とくに何もしていません!勝手に仕組みが改善されていくフィヨルドブートキャンプすげえ!

メリット

学習コミュニティで

ポモドーロで

もくもく会

開催して感じたメリットを挙げます。

  • 休憩時間に他の受講生と雑談して気分転換できる(最強
  • 学習内容を報告し合うことでモチベーションが保てる
  • 学習時間のうち、集中して作業できる時間の総量が増えた
  • 常時開催しているので、輪読会のメンバー以外とも話す機会が増える
  • 受講生同士で質問し合える
  • 先のプラクティスに進んでいる受講生から、チーム開発や就活の話を聞ける
  • 卒業生・メンター・アドバイザーが気軽に現役生と音声通話できそう、できるかも、できたらいいな〜

他にも色々と増えていきそうです。

まとめと謝辞

コミュニティ内で学習時間と雑談時間を共有できる場があるのは素晴らしい仕組みだと思いました。チャンネル設立によって、音声通話を行うハードルはかなり引き下げられたと思います。受講生・卒業生・メンター・アドバイザー問わず、気軽に参加して、もくもくしたり質問したりしてほしいです。

最後に、

@yatsuhashiさん

@yana-giさん

@Aseiideさん

ポモドーロもくもく会の設立と運用ありがとうございます。 これからもどんどん活用してください。

参考情報

トラックボールマウスをカスタマイズしたら後悔した

宝の持ち腐れ状態だったトラックボールマウス「ロジクールMX ERGOアドバンス ワイヤレス トラックボール」を、MacBookトラックパッド並の便利さを追求してカスタマイズしました。トラックボールに興味がある方もない方も、よければ御覧ください。

トラックボールをカスタマイズすると…

ボタンひとつでMission Controlを開けたり

f:id:isshi-hasegawa:20210620192410g:plain

ジェスチャーでデスクトップを移動したり

f:id:isshi-hasegawa:20210620192415g:plain

ボールを転がしてスクロールしたりすることが可能です。

f:id:isshi-hasegawa:20210620192412g:plain

動作を確認した環境はmacOS Big Sur バージョン 11.4です。

MX ERGOとトラックボールについて

本商品はロジクールのハイエンドマウスです。ボールを転がしてマウスポインタを操作できます。マウス自体を動かさないため、手首や腕の腱鞘炎を予防できるらしいです。詳細はロジクールの公式サイトや、以下のレビューなどを御覧ください。

筆者は2018年頃から使っていますが、いまだに壊れる気配がありません。フル充電で4か月稼働という惹句にも偽り無く、2021年現在もバッテリーがヘタっている様子はありません。ポインタの効きが悪くなっても、ボールを外して掃除してあげれば元通りです。耐用年数を考えれば、意外と安い商品かもしれません。

余談ですが、ここまで壊れにくいとメーカーは儲からないんじゃないでしょうか。せめて次世代機がリリースされたら筆者は買い替えたいと思います。ちなみにMX ERGOは2017年発売で、給電用の端子がmicro USB Type-Bです。次世代機はおそらくType-Cにアップグレードされるでしょう。

いまさらカスタマイズした理由

急に話が変わりますが、ずっと欲しかった外付けキーボードをようやく購入しました。購入したのはHappy Hacking Keyboard Professional HYBRID Type-S 英語配列/墨です。

しかしながら、机が狭いために尊師スタイルを導入し、パームレストを置いたところMacBook Proトラックパッドが完全にふさがってしまいました。

これには少し戸惑いました。そこで、「そういえば(めんどくさがって放置してたけど)MX ERGOってボタン割当てとか色々できたような…」と思い出したのがカスタマイズまでの経緯です。

右クリック+トラックボールで画面スクロール

実は、もともと少しだけカスタマイズしていました。右クリック+トラックボールをころころすることで画面スクロールできるよう設定していたんです。これはWindows環境なら専用のフリーウェアを使って簡単に実現できる機能ですが、Mac環境では少し複雑な設定が必要です。下記の記事でも詳細に解説されています。

まず、HammerspoonというMacの自動化を行えるツールをインストールします。 KarabinderのGitHubのissueのコメントに、Lua言語で書かれたスクリプトがあるので、これをHammerspoonのコンソールにコピペして実行し、Reload configしましょう。

-- HANDLE SCROLLING

local deferred = false

overrideRightMouseDown = hs.eventtap.new({ hs.eventtap.event.types.rightMouseDown }, function(e)
    --print("down"))
    deferred = true
    return true
end)

overrideRightMouseUp = hs.eventtap.new({ hs.eventtap.event.types.rightMouseUp }, function(e)
    -- print("up"))
    if (deferred) then
        overrideRightMouseDown:stop()
        overrideRightMouseUp:stop()
        hs.eventtap.rightClick(e:location())
        overrideRightMouseDown:start()
        overrideRightMouseUp:start()
        return true
    end

    return false
end)

local oldmousepos = {}
local scrollmult = -4   -- negative multiplier makes mouse work like traditional scrollwheel
dragRightToScroll = hs.eventtap.new({ hs.eventtap.event.types.rightMouseDragged }, function(e)
    -- print("scroll");

    deferred = false

    oldmousepos = hs.mouse.getAbsolutePosition()

    local dx = e:getProperty(hs.eventtap.event.properties['mouseEventDeltaX'])
    local dy = e:getProperty(hs.eventtap.event.properties['mouseEventDeltaY'])
    local scroll = hs.eventtap.event.newScrollEvent({dx * scrollmult, dy * scrollmult},{},'pixel')

    -- put the mouse back
    hs.mouse.setAbsolutePosition(oldmousepos)

    return true, {scroll}
end)

overrideRightMouseDown:start()
overrideRightMouseUp:start()
dragRightToScroll:start()

以下のように37行目のdxdyを、-dx-dyに記述を変更することで、ボールを転がした方向にスクロールするか、反転方向にスクロールさせるかを調整できます。ですが次の方法がオススメです。

local scroll = hs.eventtap.event.newScrollEvent({-dx * scrollmult, -dy * scrollmult},{},'pixel')

Scroll Reverserをインストールして調整することができます。筆者は下のように設定しています。

f:id:isshi-hasegawa:20210620192400p:plain

これで右クリックしながらころころしてスクロールできるはずです。

拡張ボタン設定

今回取り組んだのはこちらです。 Logicool Optionsをインストールすることで、ショートカットやジェスチャーを拡張ボタンに割り当てることができます。筆者は下記の記事を参考に設定しました。

割当可能なボタンは6か所です。 f:id:isshi-hasegawa:20210620193650p:plain

筆者の設定を例として公開します。

  1. プレシジョンモードボタンをMission Controlに割り当てています。 f:id:isshi-hasegawa:20210620193756p:plain

  2. 拡張ボタンの1をShift+Ctrl+Tabに、2をCtrl+Tabに割り当てています。これにより、高速でChromeのタブ移動が可能です。 f:id:isshi-hasegawa:20210620194325p:plainf:id:isshi-hasegawa:20210620194605p:plain

  3. マウスホイールを左に倒すのをCommand+、右に倒すのをCommand+に割り当てています。これにより、テキスト入力中ならキャレットを行頭や行末に移動できます。また、Chromeならブラウザの戻るや進むといったアクションを行うことができます。 f:id:isshi-hasegawa:20210620215612p:plainf:id:isshi-hasegawa:20210620215637p:plain

  4. 最後に、マウスホイールの押し込みです。 f:id:isshi-hasegawa:20210620215813p:plain マウスホイールの押し込み自体には中央ボタン(Chromeのタブ削除など)を割り当てています。また、押し込みながら上下左右いずれかにボールを転がすことで、ジェスチャーを起動するよう設定しています。押し込みながら上に転がせば音量を上げるように、押し込みながら右に転がせば右側のデスクトップへ移動できるようにしています。上下は音量の変更ではなく輝度の変更としてもいいかもしれません。 f:id:isshi-hasegawa:20210620220115p:plain

まとめ

別にトラックパッドがふさがってなかったとしても生産性爆上がりだったので、ちゃんと自分が使っている道具に向き合って、さっさとカスタマイズしておけばよかったです。

「なぜオレはあんなムダな時間を……」

MX ERGOと結構長い付き合いですが、これからもさらに愛着が湧きそうです。

また、質問やコメントいただけると嬉しいです。

その他の参考情報

上記リンク以外にも参考にさせて頂きました。 感謝申し上げます。

追記(2021年7月13日)

M1 MacBookだと、スリープ復帰後にスクロールやボタン、アプリケーションごとのカスタマイズが初期化されてしまう不具合が時折発生します。筆者は再起動することで対応していたのですが、下記の記事の方法でLogicool Optionsをアクティビティモニターから強制終了することで、再起動せずに済みます。

MX Master 3がM1 MacBook Proのスリープ復帰後に正しく接続しないときの対処法 | ゴリミー