eityansメモ

eityansメモ

ゆるくやっていきます

記事一覧RSS

ポモドーロ・テクニックをナメていた。良い。

在宅ワークは集中力との戦いである。

有名なポモドーロ・テクニック。Wikipediaには以下のように書いてある

このテクニックではタイマーを使用し、一般的には25分の作業と短い休息で作業時間と休息時間を分割する。1セットを「ポモドーロ」と呼ぶ。これはイタリア語で「トマト」を意味する言葉で、シリロが大学生時代にトマト型のキッチンタイマーを使用していたことにちなむ。

自分はこれを読んで、時間を細かく区切って集中して作業するテクニックなんだなと思い、まぁ一理あるよね〜程度でこれまで実践してこなかった。

最近読んだSOFT SKILLSの中でポモドーロ・テクニックについて述べられているが、そこでの紹介が衝撃だった。

彼がこのテクニックを効果的に使うためにしていたのは、一日に何個のポモドーロを実行したかを記録し、何個のポモドーロを達成するか目標を設定することだった。

(ジョン・ソンメズ ,SOFT SKILLS ソフトウェア開発者の人生マニュアル 第2版, 2022, p228)

要は、ポモドーロ・テクニックは集中するテクニックではなく、自分がどれだけ集中して仕事ができたかを可視化するためのテクニックだという。この視点は自分に取って新鮮だった。

この考え方の良いところは、行動目標になることだ。エンジニアの仕事の成果は、費やした時間量と必ずしも相関しない。適切な時間の使い方や道のりを進んできているのに、思ったより仕事が進まないこともある。そういうときに罪悪感に近い感情が生まれてしまうことがあるが、このテクニックを知っていればその過剰な罪悪感を減らすことができる。十分なポモドーロを成功させているならば、仕事人としては及第点だろう。(もちろん、成果を出せたらより良いのだが)逆に、ポモドーロがあまり成功できていなかったら、内省するいい機会になる。

一週間ほど試してみて、自分は一日に10ポモドーロを成功させることが良い目標だと思った。スマホやSlackのtimesをみたり、集中が途切れたと思ったら失敗とみなす。質の高いポモドーロを目指していく。

いわゆる Brilliant jerk について

Qiitaの記事でとても興味深いものを読んだ。

エンジニアの"有害な振る舞い"への対処法

いわゆる Brilliant jerk だと思った。程度の差はあれ、こういう性質は人間誰しも持っていると思う。

正直な話、自分はそういう性質を持っているタイプだと思う。かつて、そういう良くない部分が強く出ている時期が確実にあった。2022年頃だろうか、当時のマネージャーに指摘を受け、深く反省し、それから意識をするようになった。後に、マネージャーからは改善が見られるとのフィードバックを受け取った。

当時と比較したら今は落ち着いている気がする。意識してコミュニケーションをしているつもりだが、正直完璧とは言えない。程度の差はあれ、メッセージを送った後にこの表現は少し良くなかったかもしれないなと、一人反省することが今でもある。これは完全になくすことは難しい物だと考えている。だからといって無くすことを放棄するつもりはない。永遠の課題だと思う。

Railsのincludesとjoinsの本質的な違い

処理の範囲が違う

  • includes は先読みを行いキャッシュする → Railsのメモリに影響する(しない場合もある)

  • joins は INNER JOIN する → データベース内だけの話

関連先のデータを使いたいときはincludesを使うが、関連先の条件で絞り込みたい場合はjoinsを使う。メモリのこととか、速度のこととか、ここから考えていけばある程度応用が効く。


例:ユーザーのいいねした順でBookを取得したい

joinsを使う方がスマート

1user.books.joins(:likes).all.order('likes.created_at DESC').to_sql
2=> "SELECT \"books\".* FROM \"books\" INNER JOIN \"likes\" ON \"likes\".\"book_id\" = \"books\".\"id\" WHERE \"books\".\"user_id\" = 5 ORDER BY likes.created_at DESC"

Contentfulで定義したレスポンスをTypeScriptで使う

このブログはHeadless CMCであるContentfulで記事を作成し、Next.jsでデータを取得して表示しています。

今まで型定義を自前で用意していたのですが、自動で生成するライブラリを使うことにしました。

cf-content-types-generatorを試してみます。

contentful-typescript-codegenを使う方法を最初試していたのですが、メンテナンスがあまり活発でないことと、Contentfulのv10のアップデートに失敗してしまうことがわかりました。これから対応する方は注意してください。


型情報を含んだjsonを読み込んでTypeScriptの型を作るので、まずはそのjsonを作る準備をします。contentful-cliを使います。

1npm install -D contentful-cli

jsonを作るスクリプトをpackage.jsonに追加します。export-confing.jsonを別で作り、そこに設定値を入れます。この設定値には公開したくないアクセストークンをいれるので、gitignoreに入れてコミットしないようにします。

ちなみにmanagementTokenはCMA tokensからPATを作成することで取得しました。

1{
2  // ...
3  "scripts": {
4    "contentful-export": "contentful space export --config export-config.json"
5  }
6}
7
1{
2  "spaceId": "XXXX",
3  "managementToken": "CFPAT-XXXX",
4  "contentFile": "contentful-export.json",
5  "skipContent": true,
6  "skipRoles": true,
7  "skipWebhooks": true,
8  "skipTags": true
9}

npm run contentful-exportを実行することで、型データのjson(contentful-export.json)が作られました。

次にこの型データjsonからTypeScriptの型を作ります。cf-content-types-generatorパッケージをインストールします。

1npm install -D cf-content-types-generator

package.jsonに以下のスクリプトを追加します

1{
2  // ...
3  "scripts": {
4    "contentful-generate-types": "cf-content-types-generator contentful-export.json -o ./@types --v10 --response"
5  }
6}

スクリプトを実行することで型が生成されます

1npm run contentful-generate-types

これで型が生成されました。これで安全に開発ができます。