Kaigi on Rails 2023に参加して登壇しました

Kaigi on Rails 2023に参加しました。

家に帰ったら即寝てしまいそうなので、熱量が冷めないうちに高田馬場のスタバで書いています。
昨年はオンラインで、しかもほとんどリアルタイムではなく後からアーカイブを追うという参加の方法でしたが、今年はオフラインで全日程参加できたので、そこそこの疲労感があります。
というので、たぶん文章にまとまりはないですが、後から修正することは無いと思います。

登壇

どこかに書いていたわけではなかったんですが、今年の目標の1つに大きめのカンファレンスに登壇する、というのがありKaigi on Railsでそれが実現できてよかったです。 初参加の去年、2023年はCfPを出してみよう、と思っていたので採択いただけて本当に嬉しかったです。

speakerdeck.com

実際の発表資料はこれ。登壇終了後に公開を急ぎ過ぎてURLをキレイにするのを忘れたのが残念です。

コロナ以降、久々に物理のイベントでの登壇でした。これまではLT会などでの発表ばかりだったので30分も話すというのは、資料づくりを含めて初めての体験でした。発表そのものだけでなく、資料作りのプロセスについても反省が多く、今後に活かしたいと思います。

トークの内容については、当初想定していたよりも柔らかめの話しになっており、大きめのテックカンファレンスでこんな感じで良いんだろうか、と思っていましたが、柔らかめの部分のほうが皆さんの反応が良かったので僕のトークとしては良かったんじゃないかなと思いました。

いくつか技術的なHowについてTwitterでもご意見いただきまして、アフターパーティーで実際にお話ができて補完ができたり、違う視点をいただけたりしたのでそれも含めて登壇してよかったです。

僕の言いたかったことは、全ての場合でテーブルを作ってみたり、同じデータを違う場所に置くのを全肯定したりするのではなく、コアのドメインがある上で、よりユーザーに近くてまだまだ固まりきらないようなコードや機能については削除しやすくしておきましょう、ということでした。
逆にコアのドメインについてはデータモデリングを用いてしっかり設計したいよね、ということだと思います。主題ではないので省きました。

発表直後は「終わったぞーーーー!」感が強かったんですが、そこから他の方々の登壇を聞いているうちに、次どこかで話すためにまたインプットして打席に立たないと、という気持ちになっているので怖いものです。モチベが高いうちに一歩目を踏み出したいです。

余談

息子を家に置いて出たわけですが、テレビで応援してたよ、と妻からLINEが入っており登壇の緊張から解放された感と相まってほっこりしました。2日間まるっと家をあけることを快く許してくれた妻には感謝。

参加者として

1日目は自分の次の日の登壇に向けて頭がいっぱいだったのと、2日目は登壇に緊張しすぎて早く起きすぎてしまい眠かったので、他の方の発表は明日にでもYouTubeで復習したいです。

そんな中でも、今の時点での個人的ベストトークは、1日目午後のmoroさんの「Simplicity on Rails」というトークでした。 イベントエンティティを見つけ出してRailsのアプリケーションをシンプルに設計するというトークで、難しい概念をうまく言語化されていたと思います。

speakerdeck.com

おそらく今後何回も見返すと思います。

あまりRuby on Railsの界隈に知り合いがいなかったので不安でしたが、1日目はluccafortさんにランチに誘っていただけたり、2日目は登壇後にお声をかけていただけたりと、オフラインでのイベントを楽しむことができました。

アフターパーティー

アフターパーティーでも、界隈にそんなに知り合いがいないので不安でしたが、運良く#textafm の_yasaichiさんに話しかけることができ、#textafmを全エピソード3回ずつ聞いてます!という気持ち悪い告白をした後、moroさんのトークがめちゃくちゃ良かった(textafm のエピソード3で言いたかったことはアレですよね!というやつ)などの話をして、すごく楽しかったです。

そして、moroさんにも個人的ベストトークでした!と伝えることができて僕としては満足でした。

さらに、ここでもluccafortさんに繋いでいただいて、twitter IDは存じ上げていた onkさんに僕の発表への共感ポイントを言っていただけて嬉しかったです。

来年も参加したい

参加者の中には同じ企業で集まって同じTシャツを着て参加されている方々もいらっしゃって、すごく羨ましかったので、そこまで目立たなくとも’次回は他の同僚のエンジニアも巻き込んで参加できたらもっと楽しめるんじゃないかと思いました。来年以降の目標にしたいなと思います。

もちろん、CfPも出したい。やっていくぞ

おわり

Raycast × Open AI API × Notion で自作英単語帳

昨年末の振り返りで、2023年こそは英語で本を読みたい、と書いたのですが、半年経ってまだ読めていなかったので易しめで軽いものを読み始めました。

The Art of Readable Code: Simple and Practical Techniques for Writing Better Code

日本語版も読んだことは無いですが、だいたい言っていることはわかるだろうと思ったし、日本語版だとだいぶ薄かった記憶があったので選びました。 しかし、読み進めていくと意外と知らない単語が多いなということに気づき、毎回ブラウザからググってメモするよりも、コマンド一発で普段使っているNotionのDBに登録してくれないかなと思ってやってみました。

動作

Raycastというランチャーアプリから登録しているスクリプトを実行することができます。 英単語を引数に与えてスクリプトを実行すると、OpenAI のAPIを呼んで英単語をもとに必要な情報をJSONで返させ、それを Notion 上に用意した英単語DBに格納するために、DBのレコード作成APIを呼ぶ、そういうスクリプトを書きました。

Raycastでなくともターミナルから同様のスクリプトを実行しても良いですが、Kindle を開きながらおもむろにスクリプトを実行するには、Raycastが便利でした。

Raycast

MacでランチャーアプリとしてRaycastを利用しています。

SpotlightやAlfredの代替として最近使われている方も多いように思います。

アプリケーションやファイルの検索、電卓、クリップボード履歴やスニペット辞書など便利な機能が沢山ありますが、今回はその中でもRaycast Script Commandという、登録しておいたスクリプトを実行できる機能を利用します。

Raycast Script Command

Raycast Script CommandにはBash, Apple Script, Swift, Python, Ruby, Node.jsで書かれたスクリプトを登録することができます。自動化したり、外部のAPIをたたいたり、何かと便利です。 登録しておいたスクリプトには、引数を最大3つまで設定することができたり、スクリプトにショートカットを割り当ててすぐに使えるようにできたりもします。

今回Rubyを利用しました。

Raycast 上で create script command とタイプし、作成ダイアログから作成すると。

お目当ての言語のファイルが作成され、ダイアログから作ったスクリプトにはメタ情報がファイル先頭に書き込まれています。

今回は、細かい Raycast Script Command の使い方は説明しません。

github.com

OpenAI

英単語帳には以下の情報がほしいなと思いました。

  • 日本語訳
  • 英英辞書的な説明
  • 類義語
  • 発音記号
  • 例文

簡単に使えそうな外部APIも見つからなかったので、OpenAI社のAPIを利用することにしました。 課金が必要ですが、LLMをはじめとしたAIモデルを利用できるAPIで、チャット/画像生成/文字起こし/テキストの分類などの機能があります。 今回は、チャットを利用して英単語から上記の情報をJSON形式で返させるということをしました。

実装

以下のようなスクリプトで OpenAI API を叩きます。

word = ARGV[0] # スクリプトの引数 = 英単語

uri = URI.parse('https://api.openai.com/v1/chat/completions')
request = Net::HTTP::Post.new(uri)
request.content_type = 'application/json'
request['Authorization'] = "Bearer #{open_ai_api_key}" # OpenAI APIのAPI key

request.body = {
  model: 'gpt-3.5-turbo',
  # 回答に至るまでのチャットを入力
  messages: [
    { role: 'system', content: system_message },
    { role: 'user', content: word },
    { role: 'system', content: '{ "additional_info":' }
  ]
}.to_json

req_options = { use_ssl: uri.scheme == 'https' }

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end

POSTパラメータには、AIモデルの指定をし、messagesというプロパティにAIが回答を出力するに至るまでのメッセージを入力します。

このメッセージは以下のような入力をしました。

## システムプロンプト

  Based on the English word entered by the user, output the "Japanese meaning", "English description", "thesaurus", "phonetic symbols", and "example sentences" in the following format (JSON).

  # Given word

  description

  # Output

  {
    "additional_info": "this is additional info",
    "ja": "記述、叙述、描写",
    "description": "a statement that represents something in words",
    "thesaurus": "account, characterization, chronicle, depiction, description, detail",
    "phonetic_symbols": "dɪskrípʃən",
    "examples": [
      "the description of the event was quite different from what had actually happened.",
      "The description of the book was accurate."
    ]
  }

## ユーザー(つまり自分)のメッセージ = 知りたい英単語

Dog

## システムプロンプト

{ "additional_info":

はじめのシステムプロンプトでは、モデルに対して「ユーザが入力した英単語をもとに、"日本語の意味"、"英語の説明"、"類語"、"発音記号"、"例文"を以下の形式(JSON)で出力してください。」という命令をしています。 その後に例として「description」という英単語と、それに対する想定する出力を ほしい形式で定義しています。 いわゆる one-shot learning というやつになっています。

最後のシステムプロンプトは、{ "additional_info":という文字列です。 レスポンスとして、JSONだけを返してほしいのですが単純にユーザーが入力するだけだと、JSONに付随して説明的な文章が返ってきてしまうことが多いです。それを防ぐための工夫として 先に{ "additional_info": を入力し、それに続けさせることで、JSONだけを出力してくれることを期待しています。返ってきた文字列の先頭に、このシステムプロンプトの文字列を繋げれば、正しい形のJSONになります。 この他にも、 ```json のようなものを入力する場合もあるようですが、僕の場合はこれがうまく行きました。

また、additional_info という key が JSONに含まれているのは、valueにその他の説明を入れるように暗に促しているという役割があります。

Notion

最後に、英単語とその情報を保存するためのNotionです。 ふだんはメモやタスク管理につかっていますが、英単語のテーブルを用意して1レコード1単語にしました。

APIによって、レコード追加や編集ができますが、こちらもAPIの利用には課金が必要です。

uri = URI.parse('https://api.notion.com/v1/pages')
request = Net::HTTP::Post.new(uri)
request.content_type = 'application/json'
request['Authorization'] = "Bearer #{notion_api_token}"
request['Notion-Version'] = '2022-06-28'

def create_content(text)
  { object: 'block', type: 'paragraph', paragraph: { rich_text: [{ type: 'text', text: { content: text } }] } }
end

request.body = {
  parent: { database_id: english_words_database_id },
  properties: {
    en: { title: [{ text: { content: ARGV[0] } }] },
    ja: { rich_text: [{ text: { content: res['ja'] } }] },
    sym: { rich_text: [{ text: { content: res['phonetic_symbols'] } }] }
  },
  children: [
    create_content(res['description']),
    create_content('## thesaurus'),
    create_content(res['thesaurus']),
    create_content('## examples')
  ].concat(res['examples'].map { |e| create_content(e) })
}.to_json

req_options = { use_ssl: uri.scheme == 'https' }

Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end

今後

まず、OpenAI のAPIは単に遅いので2回目以降だと検索回数だけインクリメントするようにする、というのは追加しようと思います。

また、定期的に振り返りのために英単語の問題を出力するようにしたり、いくつかの英単語をピックアップして、長めの例文を生成させるみたいなのも試してみたいと思っています。

おわり

Raycast Script Commandはコードで作業を自動化できて楽しいです。

複雑なことをしたわけではないですが流行りのLLMを触ってみました。OpenAIのChat Completion APIの雰囲気はわかったのでこれから他のことにも試めせそうです。

2023年上半期振り返り

雑多に振り返り。

1年おきでしたが、半年でやってみました。去年のものはこれ。

blog.zuckey17.org

仕事

引き続きスタディストでエンジニアリングマネージャーとして働いていますが、最近は入社より携わっている事業の開発責任者というふうに自己紹介することも増えてきたのかなと思います。後に触れる通り採用の兼ね合いでその方がわかりやすいかなと思ってのことなんですが、コードを書く時間よりもプロダクトマネジメントについて考えることが増えているというのもあります。

この6月で在籍3年半となりキャリア最長記録を更新中です。

コードも書いてはいますが、メンバーには大玉を任せつつ僕はその周りの雑務とレビューという感じ。リリースから2年半となっており、コードの削除が気持ちいいです。

採用

前回の振り返りで採用を頑張る年にしたいと書いていましたが、とくに3月より採用に一定のリソースをさくようになりました。

媒体からスカウトを送ったり、面談・面接をしたりですが、右も左もわからないのでまずは、人事から進めてもらった書籍を読みました。特に良かったのは「経営×人材の超プロが教える人を選ぶ技術」で、エピソードの深掘りの重要性とその方法について学びました。

以前Podcastをやっていて、聞いたエピソードに対して事前のインプットとの関連からストーリー性を探して推測しすぎてしまったり、解釈を加え過ぎてしまったりする癖があったので修正しました。一方で、あまり意識しすぎると楽しくない時間になってしまうので、バランスが難しいところです。

youtrust.jp

YOURTRUSTでカジュアル面談も公開しているので少しでも気になる方いらっしゃったらお声がけください。Twitter DMでもOKです。

採用関係なく、zuckeyと雑談してみたいという人もWelcomeです。

その他

6月は会社でブログ執筆月間というのをやっていて3本ほど記事を書きました。ただ、あんまりPVが伸びなかったなぁというのがくやしかったので、もう少し見られる記事を書けるようになれたらなと思いました。まずは個人のブログを定期的に更新せねばな、と思ってはいます。

そのブログの1つにも書きましたが、認定スクラムマスターの研修を受けてきたので、採用でメンバーも増えるし、良いチームをつくるということを頑張りたいですね。

studist.tech

プライベート

プライベートは去年生まれた息子中心の生活になっています。

メインは風呂と寝かしつけ担当という感じ。特に平日の大半面倒を見てくれる妻に感謝です。

まだ、あまり遠出はできておらず、唯一の遠出は奈良の実家への初めての帰省でした。

妻も初めてで「東京は山が見えなくてつらい、と言っている意味がようやくわかった」という言葉をもらいました。

ペーパードライバー講習を受けてから全く乗れていないので、もう一度頑張りたい、という気持ちです。

AtCoderを初めてみた

GW明けくらいから競技プログラミングの勉強を始めました。採用活動をしていると候補者の方で競プロをされている方もチラホラおり、あと Rebuild.fm でnaoya_itoさんがいつ始めてもよい、みたいなことを仰っていたので始めたんですが、全然成果は出てません。

鉄則本 を進めつつ、土曜日のABCに出るというのをやっていますが、ここ2週間くらい1週分の離乳食づくりで参加がとまっており、すると学習の頻度も落ちてしまっています…

定期的にコンテストに出てフィードバックをもらうの大事ですね。引き続きゆるゆるとやっていきます。

英語

4月頃から英語を頑張る期間n度目に入っています。基本は英単語とシャドーイング

業務上も英語の必要性をちょくちょく感じるようになり、比較的長く続いているイメージ、どこまで続くのやら。

英単語は、はじめTOEICむけの『金のフレーズ』をやってましたが、2.5週くらいして語彙数が少ない気がして、「Distinction 2000」というのをやり始めました。どちらもabceedというアプリで音声も流せるのでよいです。

シャドーイングは、「タニケイ式シャドーイング」 を一通り読んでから、TEDの動画をシャドーイングしてます。

今のところ1.5ヶ月くらいやってますが、成長は見られないのでちょっとつらい。継続が必要。

notion でタスク管理

notionでのタスク管理を始めてみました。昨年、エンジニアリングマネージャーのしごとという本を読んでからAsanaを使ってタスク管理していましたが、ワークフロー自動化の機能が有料で、1200円/月と高く感じたので notion のDBで管理し始めました。

課金してAPIも利用してタスク管理していますが、Macからタスクを追加したり、GitHub Actionsで定期実行してAsanaのワークフローのような体験を実現しました。

notion AI も始まっているので、会社のブログのためにも使ってみましたが、箇条書きから、文章生成しても、結局ほぼ全て書き直ししています。プロンプトが悪いのかもしれませんが、現状あまり使い所を見つけられていません。

エンタメ

今年入ってからほぼゲームができてません。新しい漫画をいくつか一気に読みました。

TotKは買ったのに起動してもいないです。

YouTube

人狼ゲームを見るのが楽しく、「おさかなじんろう」というのが上がったらその度に見てます。

時々業務で人狼用語を使ってしまいそうになってしまうので良くないですね。

https://www.youtube.com/hashtag/おさかなじんろう

ゲームさんぽの方が独立されてチャンネルを立ち上げられたのでそちらも見てます。

www.youtube.com

漫画

新しく読んだ、読み始めたシリーズは以下。

特に、「違国日記」がよかったです。もう少し日々を思い返せるようにしたほうが良いなとおもって、この振り返りも半年で筆を取ってます。

「スキップとローファー」とか、「僕ヤバ」、「アオのハコ」みたいないわゆる学園モノをこの年になってこんなに読むことになるとは思ってなかったですが、良いものですね。

「左利きのエレン」はいつか読んでみるかーとおもっていたんで一気見したんですが、終盤思ったよりも超能力モノみたいな感じになっていてあんまり好きじゃなかったかもしれないです。

アナログゲーム

友人と2回ほどボードゲーム会をやりました。休日の昼間から始まって夕方には解散するという健康的なボードゲーム会です。

定期的に開催されるようになったら嬉しいので、忘れないように声を書けないといけないですね。

第1回 bodoge.hoobby.net

第2回 bodoge.hoobby.net

おわり

分割キーボード MOONLANDER MARK I を買って設定し3ヶ月使ってみた

MOONLANDER MARK Ⅰ という分割キーボードを購入しました。

www.zsa.io

黒に赤の差し色がかっこいい

MOONLANDERはカナダの会社ZSA Technology Labsさんのプロダクトで、僕は以前からこの会社の Ergodox EZ を愛用しています)。

左右に分離したキーボードは肩甲骨を開いた状態でタイピングができるので、姿勢よく作業ができ肩こりや腰痛に効果があります(と信じています)。

MOONLANDERとErgodoxとの比較と感想

Ergodoxはよいキーボードなんですがいかんせん大きくて分厚いので持ち運びには向きません。 MOONLANDERはErgodoxの後継にあたるモデルで軽量化、スリム化されてポータビリティが上がっています。

具体的な進化ポイントは以下のような感じです。

  • ポータビリティ
  • 親指部分のキーの角度を変えることができる
  • USBのポートが Type-C に変更(Ergodoxは USB miniBなのでケーブルが限られた)
    • 位置も右から左に。右のマウスの領域に影響がない
  • キーボードが虹色に光る
    • 全体が虹色に光りますし、設定によってはレイヤーごとに色を変えることもできる

逆に親指部分のキーの数はErgodoxより減っています。

すでに購入から3ヶ月使ってみており、比較してみた感想は

  • リストレストはよくずれるし、ゴム製だと汚れが目立つため、プラスチックで一体になっているのはよい
  • Type-Cポートがケーブルの選択肢が増えて嬉しい
  • ほとんど外出しないので長距離の移動はわからないが、ダイニングテーブルでiPadを利用するときに使うために書斎からさっと運ぶハードルはぐっと下がった

というかんじです。

Cloud9をiPadから使うのはこのあとやめました

2022の振り返りでも書きましたが、子供が生まれ休日のちょっとした時間の作業はダイニングテーブルで作業することが増えました。そのために役に立っています。

購入から到着

Webサイトでの購入から11日で到着しました。(9月21日に購入し、10月2日に到着しました)
DHL EXPRESSで台湾から送られてきましたが、注意すべきは関税の支払いです。 Webページで商品の支払いは完了しますが、キーボードが日本に入るときに関税を支払う必要があります。ZSAからではなくDHLからメールが届くのでリンクからクレジットカードなどで支払う必要があります。僕の場合は2800円でした。

設定方法

基本的には、以前に書いたErgodoxの設定方法とほぼ同じです。 ErgodoxとMOONLANDERでは親指部分のキー配列が微妙に異なるため、レイアウト編集のためのWebアプリケーションのURLが以下に変わっています。

Oryx: The ZSA Keyboard Configurator

おわり

コロナもそろそろ落ち着いてきたと思いきやまた感染拡大しており、いつになったらしたいタイミングで出社できる*1のかわかりませんが、気軽にキーボードを持ち歩ける日々が待たれます。

*1:気軽に飲みに行きたいものです

ペーパードライバー歴10年、出張講習で3時間公道を走ってきた

年末の振り返りでペーパードライバーを卒業して車に乗りたいという目標を掲げたので、早速行ってきました。 教えてもらったことを振り返りつつメモを残しておこうと思います。

2012年、学生時代に免許を取得してすぐに1度だけ運転して以来、一度も乗ったことがなかったので10年ぶりの公道での走行でした。 今日の講習のはじめ、ブレーキを左足で踏もうとしたぐらい何もかも忘れていましたが、終わるころには次またすぐ運転したい!と思うくらいには楽しかったです。

ペーパードライバー講習

世の中にはペーパードライバー講習というものがあるようで、いわゆる教習所と出張型のタイプがあるようです。 軽く調べたところ都内だと3時間2万円前後で受けられそうです。

いきなり公道が怖ければ教習所、普段利用する道で練習をしたければ出張型、という整理でしょうか。

教習所や大手のペーパードライバー講習のサービスだとかなり先まで予定が埋まっていたため、以下のサイトで口コミを見つつ探して予約しました。

ペーパードライバー講習を探すなら、[ペーパードライバーナビ]

最終的にRe:Driversというスクールにお世話になりました。 スクールといいつつおそらくお一人で運営されているようで、予約の確定や問い合わせなどもメールでやり取りしました。 3時間で1万8000円のコースを受講しました。

講師の方はもともと教習所で教えておられたようで、教習所で見たことがあるような本や資料を使いつつ丁寧に教えて下さいました。個人的に教習所の先生はあまり好きな人が多くなかったんですが、この方はフランクで雰囲気も良かったのでおすすめです。東京・神奈川・千葉なら出張可能みたいなのでぜひ。 (何ももらってません)

教習車もプリウスで高級感ありつつ乗りやすかったです。マイカーでも講習を受けられるみたいです。

なにより、大晦日に予約をし1月4日に受講できたので思い立ったときに実行に移せて良かったです。

講習内容

講習内容は以下のような感じでした。 備忘を兼ねて。

教習所にいたときのことを正確には覚えていないですが、短い時間だったからか、より実践的なアドバイスが多かったような気がしました。

運転する道は希望があれば聞いていただけるようでしたが、僕は特になかったのでおまかせしました。

座席の調整や基本操作の確認15分

  • 座席の調整
    • ブレーキを踏んで足が少し曲がる程度に調整
    • 座面は道路が見やすいように高めに設定
    • シート角度はハンドルの上を両手で持ったときにちょうど腕が伸び切るくらい
  • ミラーの調整
    • バックミラーはリアガラスがすべて見えるように
    • サイドミラーは左右それぞれ車体の1/4が入っていて、地面が1/2くらい見えるように
  • シフトレバーの操作、パーキングの入れ方、MTでとの差分
  • サイドブレーキの操作、プリウスは左足で押し込むタイプのサイドブレーキ
  • ウィンカー、ライト、ワイパーの操作

意外と忘れていることが多かったですが、必要最低限の情報を伝えていただけて好印象でした。

近所をぐるぐる 1時間ほど運転

  • 30km/hの道を左まわり、右回り変えつつゆっくり走行
    • 住宅街なので細い道を飛び出しに注意しつつ
  • 車体の左右へのよせ方、停車
  • 右左折の際の歩道の確認、タイミング
  • 左折時の内輪差の把握とハンドルを切るタイミング
  • 細い道での対向車の対応と信号の待ち方

はじめは30km/hでも速く感じて怖かったですが、教習所の車と同様助手席からのブレーキもあったので安心して運転できました。 結局助手席ブレーキの活躍の機会はなかったですが、やはり1人でいきなり練習するとそうはいかないのでよかったです。

残りの時間、家から10km圏内位を少し広めの道路を中心に運転

  • 片側2車線の道路(50km/h)の道を走行
  • 大きい交差点での右折
  • 車線変更のための確認
  • 信号や道路標識の意味を適宜クイズ形式で確認

半径10km圏内くらいを運転できて、行きたいなと思っていた大きめの公園の近くまでいけたので、出張型を選んでよかったなと思いました。

家の周りに帰ってくる頃には30km/hがゆっくりに感じて、近所の道も視野を広く保ちながら落ち着いて乗れるようになっていて感動しました。

駐車が不安だったんですが、それを伝え忘れて練習ができなかったのが心残りです。口コミには駐車も練習された方もいらしたのでできそうでした。

今後

近所にカーシェアサービスがあるので、まずはもう少し1人で練習したいですね。 今日は1月4日で普段よりも都内の交通量が少なかったようなので少し不安もありますが、楽しみです。

将来的には、子供を連れてキャンプに行きたいので引き続きチャレンジしていきます。

めちゃくちゃ運転にハマったら車を買ってしまう未来もあるのかもしれないです... 💸

2022年の振り返り

2022年の振り返りです。雑多に。

去年のものはこれ。

blog.zuckey17.org

仕事

引き続き、株式会社スタディストにて、エンジニアリングマネージャーとして働いています。 今年の頭に、開発本部エンジニアリング部 副部長という立場に任用いただきましたが、変わらず新規事業を成功させることに軸足をおいています。 この12月で丸3年となりキャリア最長記録を更新中です。

チームを一歩前にすすめる取り組み

人数の増減はあれどチーム結成から2年以上経つと、チームとして新しいチャレンジをしていきたくなるものです。

個人的にも事業立ち上げの際に僕自信の手に馴染んだ言語、環境、フレームワークを選択してきたので、変化が欲しいタイミングでした。

変化を意識的に起こしていくためにも、会社の他のチームメンバーに「あそこはなんか勢いありそうだぞ」と思ってもらうためにも、年始から動いていました。

studist.tech

特にTypeScript を本番に導入して運用するのは初めてで開発体験も良かったなと思っており、来年は既存システムのフロントエンドの置き換えをしたいなと思っています。

採用

2022年の振り返りではないんですが、2023年は採用を頑張る年にしたいです。 2年もマネージャーをしているのに採用の実績がありません。 新規事業でミニマムなチームでやりくりしていたこと、ちょうどよく社内でリクルーティングできていたために本腰を入れることがありませんでした。 事業の成長により本格的にチームの拡大を目指すため、採用を頑張りたいです。 採用、オンボーディング、チームの拡大によってマネージャーとしても一皮むけたいなと思っています。

すでに募集しており、詳細については弊社VPoEのブログが凄くよくまとまっていたので貼っておきます。 興味がある人は僕個人でも良いので連絡ください。

studist.tech

成功させるためにも、アウトプットや露出を増やしたいですね。

インプット

去年はインプットが少なかったと書きました。 今年は書籍を読み上げさせて聞くことによってかなりインプットを増やすことに成功しました。

blog.zuckey17.org

コードがあまり出てこない本でいうと以下の書籍を読みました。増やせたような気もしますが波もあり、まだまだ少ないような気がします。

昨年末にチームトポロジーを読みましたが、僕は基本1チームで開発しているためそこまでしっくりこず、年明けから前半はコーチング関連の本をいくつか集中的に読みました。
後半は、オライリーから出ているマネジメント系の本を中心にマネジメント業務について体系的にインプットしました。

2023年はコーチングを実務にもっとしっかり落とし込んだり、チーム外でもコーチングの実績を作ることができたら面白いかもな、と考えています。

また、英語でインプットできるようにしたい、という気持ちがあり、以下の本を読みはじめました。 友人も巻き込んだのに途中で脱落する、というゴミムーブをカマしてしまったので、来年はリベンジしたいと思います。

Amazon.co.jp: A Philosophy of Software Design, 2nd Edition (English Edition) 電子書籍: Ousterhout, John K. : 洋書

直近ではないですが、将来英語で仕事ができるようになりたいとも思っており、来年はそういう準備にも力を入れていきたいです。

プライベート

大きなライフイベントがあり、夏以降ガラッと生活スタイルが変わりました。

子供が生まれた

夏に子供が生まれました。 それに伴い8月中旬から10月末まで約2ヶ月半の間育休を取得しました。 マネージャーとして育休を取ることについて、快く送り出してくれたメンバーに感謝しています。

まだまだ乳児で、首も完全には据わっていない状態なんですが、表情が豊かになってきて、笑顔が育児の大変さを癒やしてくれます。

これからどんどん動くなって目が離せなくなると思うとゾッとしますが、楽しんでいきたいです。

子供ができると車に乗れるようになったほうがいいな、と思う機会が増えました。 ペーパードライバー歴11年ですが、近場にカーシェアのある駐車場があるので、来年は車に乗る練習をしていきたいなと思っています。

住み替え

去年は書斎のために家を購入し直したと書きましたが、子供が生まれることに備えたものでした。 1LDKだったところが3LDKになりました。念願の書斎(兼物置)も手に入れました。

前の家は西新宿だったのでアクセスや利便性がかなり良かったのですが、少し都心からは遠くなりファミリー層が多いエリアになりました。

住み替えに際してFPに相談し最低限の保険にも加入しましたが、子供が生まれたので再度見直す必要がありそうです。

旅行

子供が生まれる前、駆け込みで夫婦2人の最後の旅行に行きました。 ちょうどコロナが落ち着きを見せているタイミングを狙って、石垣島と横浜に行きました。

石垣島(4月)

GWすこし手前に行きました。石垣島はコロナの第1波が落ち着いたタイミングで新婚旅行に行ったんですが、もう一度2人で行っておきたいということで安定期を狙って行きました。

フサキビーチリゾートに2泊3日し、短い期間でしたが中日に竹富島にまでいけてかなり充実していました。 フサキの夕日がもう一度見たいと思っていたので、綺麗な夕日が見れて満足でした。

今回は基本タクシーで移動しました。基本ホテルでゆっくりしたので良かったんですが、次家族で来るときは石垣島を車で移動したいです。

フサキビーチの夕日、南国っぽい写真、フサキのプール

有名なアイス店からのフサキビーチの眺めとアイス、竹富島コンドイビーチ

横浜(7月)

近場であれば良いだろうということで横浜のランドマークタワーの上にある横浜ロイヤルパークホテルに泊まりました。 基本ホテルでまったりしつつ、食事とショッピングを楽しむという優雅な休日を過ごしました。

部屋から見た景色

エンタメ

ゲーム

Minecraft

今年はあまりゲームをしませんでしたが、時たま開いてはちょっとだけワールドをいじるというのを続けていました。 また、MODを入れてみるなどをして、影MODで建築をきれいに見せてみたり、縛りプレイ要素を導入したりして楽しみました。 ゲーム実況は引き続き時間があるときに見ているので、将来息子とやったときにドヤれるように腕を磨きたいです。 Java がかければ MODも作れるのでやってみたいなと思いましたが、PCが必要っぽいので一旦断念しました。

天空の庭園

Factorio

Switch 版が出たので、やってみました。 サンドボックス型のゲームが好きなのでやはりハマりましたが、時間が吸われて仕方がないのでパタッと触らなくなりやめました。 Switch 版だと要素の選択がスティック操作で難しいのでやはりPCが欲しくなります。

漫画

読んだ漫画をあげ始めればキリがないんですが、印象に残っているものを紹介だけしておきます。

アオアシ

もともと大学で体育会に所属していたときから、モチベーションを上げるためにスポ魂漫画を利用してきました。 たぶん、ハイキュー!!とかが好きな人はハマるんじゃないかなと思います。 青とかブルーとかが付く漫画が多いな〜と思って避けていたんですが、大好きなやつでした。

今日のさんぽんた

女の子と柴犬、ポン太との散歩の一幕を1話完結で描いている漫画です。 ちょっとアホな飼い主の言動にポン太が心の中で突っ込むことで話が展開するんですが、なにも考えずに読めるのですごく良かったです。 関西弁なのがかなりポイント高かったです。

日本三國

まだ3巻しか出ていないんですが面白かったです。 近未来、文明が崩壊した後戦国時代になった日本で、三国志みたいな物語が展開します。 ちょっとグロ描写あるのでそこだけが注意ポイントでした。

その他

あたりを新規に読みました。

電子書籍をiPhoneで聴くようにしたら読書への苦手意識が和らいだ

*1

読書の秋ですね。

書籍を読む行為は、自分のペースで読み進めることができるという点が良い反面、ページ送りをするという行為が必須であるため、「ながら」ができないのがイマイチだなと感じることも多いです。

昨今ではaudible など、耳で本を聴くという体験も広がっているように思います。読み上げられた本を聴くならば、精読をしたいのか、拾い読みをしたいのかに関わらず一定のスピードで読み進めてくれ、ページ送りも不要なので「ながら」読みが可能になります。

しかし、そういったサービスでは別途お金がかかったり、お目当ての本がなかったりというので、少し残念だなと感じていました。


そこで本エントリでは最近僕が重宝している、iOS や iPadOS の読み上げの機能を紹介します。

各OSのアクセシビリティの機能として存在する画面上の文字の読み上げを流用し、Kindle や ブックアプリの電子書籍を機械に読み上げさせ、聴く読書に使おうというものです。

利用方法


準備は簡単です。新規にアプリをインストールする必要はありません。

設定アプリを開き「アクセシビリティ > 読み上げコンテンツ」と進み、以下の画像のようにします。 *2

 

 

  • 「画面の読み上げ」のトグルを有効にする
  • 「読み上げコントローラ」をオンにする

 

すると、画面の端に 「>」のようなマークが現れ、タップすると画像のようなコントロールキーが現れます。

 


その後、少し説明が難しいですが、以下の gif のように手のマークをタップしてから画面上からスワイプすることで、そのページの読み上げがスタートします。

 

 

実は紹介する以前からこの機能は存在していたのですが、僕の旧端末の iPhone SE2 ではスペックの問題なのか、読み上げが止まるなどあまり思うように動いてくれず、今回 iPhone 13 mini と 第3世代の iPad Proで動作が確認できたため、紹介しようと思いました。

 

使ってみて

 

僕は精読が苦手で、理解のために何度も同じ場所を読み返して進行が遅くなってしまい、結果飽きてせっかく買った書籍も途中で離脱してしまうことが多いのが悩みでした。

逆にスピードを上げてとりあえず浅くでも読み終えることを優先する方法を試そうとしたこともありましたが、なかなかよいバランスがわからず結局時間がかかってしまっていました。

 

この読み上げ機能を利用し始めてからは、「ながら」でもとりあえず本を最後まで流すことができ、この本は大体こういうことを言っている、というインデックスを貼ることが可能になりました。聴き流した後で気になる場合は後でもう一度読めばよく、その時は初めて精読するときよりもスムーズに読み進められている感覚がありました。

家事をしながら、日々の買い物をしながら、散歩・ランニングしながら聴くことができ、読書の量が以前より増えたように思います。

 

プログラムコードがたくさん存在するような書籍では利用できませんが、そういう書籍はむしろ写経するので、読み上げの対象にならない、という整理をしています。

 

一方でこの機能はあくまでアクセシビリティのためのものですので、聴く読書としての使い勝手がこなれているとはいえません。

具体的には以下の部分が微妙ポイントです。

 

  • スワイプの操作、再生の操作に多少の慣れがいる
  • 読み上げ中にKindle や ブックアプリを離れたり、画面がロックされるとページの境界で読み上げがストップする
  • 漢字などの読みが不正確な時がある*3
  • 埋め込まれているリンクも読み上げてしまうので、目次や章末の参考文献を聴くのが辛い
  • Kindle の固定レイアウトのものや、PDFの本は読み上げを利用することができない
  • 図表などは読み上げられない(これは読み上げ機能だけの問題ではなく、聴く読書の問題だと思います)


ということで、もちろん 本を聴くという体験としては audible などにお目当ての書籍がある場合はそちらを利用するほうが良いのだろうな、と思います。

 

まとめ

メリデメありますが、読書について僕と同様の課題がある方はぜひ試してみてください。

なんかうまくいかないよ、もっとこういう良い方法があるよ、とかがあれば是非コメントまたはTwitter にて教えてほしいです!

これで読んだ本の感想もブログに書いていきたいです。

*1:もちろん聴くのは電子書籍です

*2:僕は全ての端末をダークモードで利用しているので、背景色・文字色などはお手元の環境と異なっている可能性があります。

*3:漢字の読みは登録できたりします。が、なんとなく想像できる範囲なので、僕はあまりつかっていません