「休養学: あなたを疲れから救う」を読んでエンジニアの疲労について考えてみた
こんにちは。山屋です。 みなさん、お元気ですか?なんとなく体がだるい、朝起き上がるのがつらい…といったことはありませんか?私は時々ありました。 というわけで、休養学: あなたを疲れから救うという本を読んで、疲労や休養について学んでみることにしました。 「疲労」とは何か 著者が所属している日本疲労学会では、以下のように疲労を定義しています。 過度の肉体的および精神的活動、または疾病によって生じた独特の不快感と休養の願望を伴う身体の活動能力の減退した状態である まとめると、「体を動かしたり、頭を使ったりすることで、本来の活動能力が下がった状態」を指すということです。 そして、この本によれば日本人の約8割が疲れているそうです! 疲労回復で大切なこと 交感神経と副交感神経について この2つは自律神経と呼ばれ、自分の意思ではコントロールすることのできない血流や臓器のはたらきを司る神経で、疲労回復に大きく関わっています。 交感神経は緊張・興奮していると優位になり、副交感神経はリラックスしていると優位になります。 この2つのバランスはとても大事です。 バランスが崩れてしまうと、昼間にエネルギッシュに活動したのに夜は眠りが浅くなって疲れが取れない、あるいは昼間に活動的になれずいつも元気がないという状態になってしまいます。 つまり日中はたくさん活動して、夜はぐっすり寝るのがベストということです。 活力について 私たちは、「活動→疲労→休養」というサイクルを日々繰り返しています。 このサイクルをスマホの充電池に例えてみると、休養によって100%のフル充電状態に回復できれば何の問題もありません。しかし日本人の8割が疲れているわけですから、100%まで充電できていないということです。 ではどうすれば100%に近づけられるのでしょうか? 著者は「活動→疲労→休養」というサイクルに「活力」を加えることを提案しています。 「活力」は「疲労」の対義語で、活動のもととなる力のことです。休養+活力で100%まで回復しましょう。 「活力」を高めるには? あえて軽い負荷を自分にかけると活力が高まるということが判明しているそうです。 筋力トレーニングにおける超回復理論と同じで、疲れているときにさらに負荷をかけて回復したときには前よりも基礎体力が上がっている、ということですね。 取り組むことで自分が成長できたり、楽しいと思えたりするようなものが望ましい負荷です。(仕事に関するものは仕事で疲れた傷に塩を塗るような行為なので避けた方が良いでしょう) 例えばランニングをしてみるとか、読みたかった本を読破するとか、趣味で何かの賞に応募してみるといったことです。 7つの休養タイプ 続いてはどうやって休養をすれば良いかということを説明します。 休養は大きく以下の3つに分類される、計7つのタイプがあります。 生理的休養 休息タイプ いわゆる「休憩」「睡眠」といった体を動かさず、エネルギーが回復するのを待つ休み方です。 運動タイプ 適度な運動は休養の一種になるのです。(疲れるまで運動してしまったらもちろん逆効果です!) 運動によって老廃物の除去が促進されたりリンパの流れが良くなったりするので、疲労感の軽減につながります。 栄養タイプ 栄養バランスのとれた食事をすることは大事ですが、「食べ過ぎないこと」が休養学では重要視されます。 心理的休養 親交タイプ 人と関わることでストレスを解消する休み方です。親しい人とのスキンシップや、友達や家族との楽しいお喋りなどですね。親しい相手ではなくても、店員さんや近所の人などと軽く挨拶や世間話をするだけでもOKです。 あと、森林浴など自然とのふれあいも含まれるそうです。 娯楽タイプ 好きな音楽を聴く、映画を観るといったいわゆる好きなことをする休息です。 造形・想像タイプ 絵を描く、作曲するといった創作活動のことです。(プログラミングも含まれるのでしょうか?) かたちのあるものを作り切る必要はなく、地図や動画を見て旅行した気分になったり、推しのことを考えたりと好きなことについて空想するだけで十分です。 社会的休養 転換タイプ まわりの環境を変えることです。引越しや転職といった大きなことである必要はありません。 着替えや部屋の掃除、旅行といったことも含まれます。 具体的にどうやって休むか 7つのタイプを組み合わせることで回復の効果が何倍にもなります。 ただし、やみくもにこれら全ての休養を行う必要はありません。例えば人付き合いが苦手ならば、無理して人と話さなくても大丈夫です。自分の好き、あるいは得意な休養を組み合わせていろいろなタイプの休養の「いいとこどり」をしましょう! エンジニアと疲労について 今回疲労や休養について学んでみて、エンジニアは疲労が溜まりやすい職業なのではないか?という印象を受けました。 基本的に一日中デスクワークで、ほとんどリモートワークという方も少なくないのではないでしょうか。肉体労働とは違って日中の活動量が少なくなってしまうため交感神経が優位にはたらかなくなってしまうのではないかと思います。そして自律神経のバランスが崩れ、うまく休めない…という負のスパイラルに陥ってしまうかもしれないと思いました。 加えて、もし一人暮らしならばリモートワークで人との関わりも少ないですし、休みの日も業務に備えて勉強、実装しているものは異なっているでしょうがパソコンの前で座っての作業ということは変わらず、変わり映えのない日々…何も意識しなければ充電がじわじわと減っていきそうな生活という印象です。自律神経のバランスの維持と休養、活力それぞれで難しい部分が多少はありそうだと思います。 少なくとも、積極的に運動を取り入れた方が良いかなと思います。個人的には運動+親交(自然とのふれあい)+転換(外出による気分転換)ができる散歩が良さそうです。 あとは勉強も一人でやるのではなく、たまには勉強会やもくもく会に参加してみることも気分転換になって良いのではないかと思います。 感想 「私うまく休めてるな〜」というのが率直な感想でした。ジム通いや散歩が趣味なので、7つのタイプのうちほぼ全てを組み合わせて休めていました。 ではなぜ疲れがたまっていたのか? それは「睡眠不足」と「オーバーワーク」が原因だったのではないかと考えています。 先日コロナウイルスに感染してしまい、たくさん寝て、2週間運動をお休みしました。その結果すっかり元気になってしまいました。 たとえ多くの休養タイプを組み合わせていても自律神経のバランスが良くても、肉体的に疲れていたり睡眠時間が短かったりしたらそりゃ疲れますね。つまり疲れたら寝ましょう。 まとめ 長くなってしまったので、大事だと思ったことをまとめます。 昼はたくさん動いて夜はしっかり休んで、交感神経と副交感神経のバランスを取りましょう 疲れているときに軽い負荷をかけると「活力」が高まって基礎体力が向上させましょう 7つの休養タイプを組み合わせて、自分に合った休養をしましょう 最後までお読みいただきありがとうございました。
Facebookアカウント乗っ取られました(泣)
こんにちは、代表の大越です。 遅くなりましたが、新年あけましておめでとうございます。 本年もどうぞよろしくお願いいたします。 さて、昨年11月下旬から忘年会シーズンが始まり、昨日ようやく最後の新年会が終わりました。振り返ると忘年会、新年会、その他会合をあわせ合計30回も宴会がありました。飲みすぎですね。しばらくは摂生しようと思います。 そして今回のブログですが、ついにやられてしまいました。Facebookアカウントが乗っ取られてしまいました。乗っ取られてから復旧するまでの試行錯誤の記録を残しておきたいと思います。 もし同じようにアカウントを乗っ取られて困っている方がいたら、参考になれば幸いです。 いつ、どのように乗っ取られたのか? 2025年2月14日 12:00 仕事の合間にMessengerを確認した際に、あるグループの友人から「Facebookアカウントを乗っ取られたので、暫定で新規アカウントを作りました」との報告がありました。伝染することはないとは思いつつ、乗っ取り報告を聞いたタイミングでパスワードを変更するのが自分のルーティーンとなっていました。 今回も念のためパスワード変更しておこうと思い、PCからパスワードの変更手続きを進めていたところ、突然手元のiPhoneのMessengerがログアウトし「ん?なんかのバグか?」と思ったのも束の間、PCで開いていたFacebookも強制ログアウトさせられてしまいました。慌ててログインし直そうとしたら画面には「あなたのアカウントは一時停止されました」の表示。 「え?どういうこと?もしかして俺も乗っ取られたのか?」 調べてみると、どうやら私のFacebookアカウントと連携していたInstagramの情報が、勝手に第三者のInstagramと紐づけられたようで、そのInstagramアカウントがルール違反していたため、巻き添えで私のFacebookアカウントも停止された可能性が高そうです。 セキュリティ面には気を付けていたつもりで、パスワードは1passwordを利用して16桁のランダム生成(大小英数記号)を設定していたので、ブルートフォースアタック(総当たり攻撃)で抜かれる可能性は低い。他のサイトともパスワードの使いまわしはしていないので、漏洩も考えにくい。考えられるとしたら、気づかない間にフィッシング系の何かで抜かれたのか。最大の失敗は面倒くさいと思って2段階認証を設定してなかったこと。完全に油断してました。 復旧のためにいろいろ試してみる(Instagram) 2025年2月14日 15:00 とりあえず会社メンバーに状況を報告し、13時からの絶対外せないオンラインミーテングに気が気じゃない状態で参加して、15時から復旧にむけての調査開始。 まずは「あなたのアカウントは一時停止されました」画面に案内されているInstagramから異議申し立てをする方法を試してみます。 ChatGPTにこの画像を貼り付けて復旧する手順を聞いたところこのような回答でした。 方法①:Instagramから異議申し立て Instagramにログイン 「ヘルプセンター」アクセス 「アカウントの停止または制限についてのヘルプ」を探す 「異議申し立て」のオプションがある場合、それを選択して手続きを進める 方法②:Instagramの「問題を報告」機能を使う Instagramの「問題を報告」に進む 「Facebookアカウントが誤って停止された」と詳細を記入し送信 方法①は「異議申し立て」のオプションが見つからず却下 方法②は「設定」→「ヘルプ」→「問題を報告」を発見! 自由にテキスト入力できる画面に辿り着いたものの、タイトルは「技術的な問題を報告」で「ここでは不正利用に関する報告は送信しないでください」と記載があります。 次に同じような事象ではまってる人の情報を探し「 Instagram のサポートをリクエスト 」からいけそうだったので試してみるも、ヘルプセンターとサポートリクエストの往復でアカウント復活を陳情できそうなところが見当たりませんでした。 結局、Instagramからリクエストできそうなところは「技術的な問題を報告」しかなさそうでしたので、ダメ元で入力して担当部署に転送してください!と送信しました。 復旧のためにいろいろ試してみる(facebook) 次にログインできない状態ではあるもののFacebookからも何かできないかと調査。 すると「 不正アクセスされたFacebookアカウントを復旧する 」という案内を見つけました。 アカウントが不正使用された 不正アクセスされたアカウントを検索する このアカウントの利用を再開しますか? ログイン情報が使用できなくなった Facebookの利用を再開(新しいログイン用メールアドレスを設定) 順調に案内の通りに進み、これは問題解決か!と思っていたら、一番最後の新しいメールアドレスを入力するところで「有効なメールアドレスを入力してください」の警告が表示。別のメールアドレスを入力してもまた警告が表示。何を入力してもこの警告は消えずここで手詰まり。 また、Facebookに何度も何度もログインを試みたせいなのか、ある時から本人確認の書類を求められるようになりました。ある意味これは本人を証明できるチャンスかもと思い、運転免許証を登録するも3分後に「別の本人確認書類を送信してください」とのメールを受信。次に「マイナンバーカード」を登録したら16分後に先ほどと同じ「別の本人確認書類を送信してください」メールを再度受信。私はパスポートを持っていないので、これ以上登録できるものはなく手詰まり。 かれこれ7時間近く調べて試してを繰り返してきて、さすがに疲れたので、Instagramの「技術的な問題を報告」にワンチャン期待して土日待つことに。 これはもう泣き寝入りするしかないのか... 2025年2月17日 10:00 土日を使って同じ事象の報告で復旧できた人がいないか調査しましたが、ブログ、Youtubeともに復旧できてる人は見つからず完全に泣き寝入りモードに。自分1人で調べるには限界を迎え、月曜日に会社のメンバーにアドバイスをもらうことにしました。 半ばあきらめておりましたが、弊社の調査力No.1のメンバーがなんと海外サイトで同じ事象で復旧した報告を見つけたとのこと!ありがとー!!! Originally Answered: My Facebook account is suspended due to an Instagram account tranhuytuan31 which is linked to my account. I don't know whose Instagram account is that and it was my first time to come across it. How to recover my Facebook account? IT CAN BE RECOVERED, BE PATIENT! This is what happened to me September 6th 2024, I went onto my Instagram and subscribed for Meta , This was $14. I then went into account settings, meta verified, get support, account safety, my account was hacked and start the chat from there. They will ask you if the account belongs to you or someone else, then if it’s Instagram or Facebook, Questions questions similar to these, Until It leads you to the option to chat with the agent. Follow the chat and they will ask you Screenshot of the problem then they will say that your complaint has been lodged and they will investigate but there is no guarantee It will be reinstated. The person chatting with me then left and I was not able to get notifications from this chat, so I periodically checked for replies. 48 hours passed with no reply , then I got a message in the chat asking for a new email not associated with the account and when I was hacked. I answered the approximate time and made a new address and sent it in. Another day passed and I got a series of messages and I was ecstatic when I saw “GREAT NEWS” A Facebook link was attached as well as a message stating a email was sent to the new Address I submitted. From there I followed through the steps. I had to change the password from the Code they gave then they should post from the last few days that The in the Individual shared if I would like it removed then I was finally able to go into my account. I changed the password for a second time. I know I have full access to my Facebook. The Process takes a little while And you need to be patient Do not get frustrated and provide the information needed hopefully all works in your favour and you get reinstated. 中身を読んでみると... 「 Instagramのサブスク「Meta認証」を申し込みました。費用は14ドルでした。」 「Meta認証」って有名人が「なりすましじゃなくて私が本人ですよ!」を証明するやつですよね。 月額2,000円で10年以上のデータとMessengerの仕事のやりとりが復旧するなら安いものと、藁にも縋る思いでダメ元で課金してみました! この課金で受けられるサービスとして「Meta認証」もそうですが、エージェントとチャットできるサポートが受けられるようになります。 「アカウント設定」→「Meta認証」→「サポートを受ける」→「アカウントの安全」→「アカウントがハッキングされた」を選択し、チャットを開始しました。 通常の「技術的な問題の報告」では、メールを送っても受付の返信も来ず、送信履歴もなく、進捗も分からない。でも今回はリアルタイムで人が対応してくれる!この違いは大きかったです。 調査に通常1~3日、複雑な問題だと2~3週間、さらに混んでると1ヶ月くらい回答に時間かかるかもしれないよと言われました。復旧の見込みが立つなら1ヶ月くらい待つ覚悟でいたのですが、まさかの30分後に解決!? めちゃくちゃ仕事で使っているので、万が一の時のサポート費用として月額2,000円なら安いものです。 最後に この4日間、めちゃくちゃ調べましたが復旧できた人の具体的な記事はほとんど見つかりませんでした。今回のブログが少しでも皆さんの参考になれば幸いです。 あと、2段階認証は大事です。面倒くさがって後回しにすると私のように後悔することになりますので絶対に設定しましょう。 ちなみに今回はエージェントのサポートを受けるために課金したのですが、おまけでMeta認証のバッジもついてきました。帰宅後、家族に「パパって有名人だったの?」って言われたのはご愛嬌で(笑) 最後までお読みいただき、ありがとうございました!
Rails(ActiveSupport)のHash#slice!の罠
ご無沙汰してます。豊田です。 随分長いことブログを書いていなかった気がしますが、きっと気のせいですよね。 今回はタイトルにもあるように Rails(ActiveSupport)が提供する Hash#slice! の挙動について、書いていきたいと思います。 いきなりですが問題です こちらのコードの実行結果、わかりますか? hash1 = { a: 'hoge', b: 'fuga', c: 'piyo' } hash2 = hash1.slice!(:b) hash2 # => ??? この問題がすぐに(正しく)解ける方は、このブログは読まなくで大丈夫ですw まずは他の類似メソッドでおさらい 「いきなりそんなこと言われても...」という方もいらっしゃると思いますので、類似のメソッドの挙動をおさらいしてみましょう。 Array#slice(Ruby) Rubyの組み込みライブラリ、Arrayクラスが提供する #slice メソッドです。(公式) array1 = [100, 200, 300] array2 = array1.slice(1) array1 # => [100, 200, 300] array2 # => 200 引数で指定したindexに該当する要素を返してくれます。 ※他にも異なるパラメータを使う方法がありますが、基本的な動作は変わらないので割愛します Array#slice!(Ruby) 同じくArrayクラスが提供する #slice! メソッドです。(公式) array1 = [100, 200, 300] array2 = array1.slice!(1) array1 # => [100, 300] array2 # => 200 レシーバーを破壊的に変更する点は異なりますが、指定した箇所の要素を返すという点では #slice と同じですね。 Hash#slice(Ruby) 続いて同じく組み込みライブラリが提供する Hashクラスの #slice メソッドです。(公式) hash1 = { a: 'hoge', b: 'fuga', c: 'piyo' } hash2 = hash1.slice(:b) hash1 # => {:a=>'hoge', :b=>'fuga', :c=>'piyo'} hash2 # => {:b=>'fuga'} 指定したkeyと、対応するvalueのペアを返します。 指定した要素を取り出す。という点でArrayクラスの #slice メソッドと似ていますね。 冒頭の問題 それでは、冒頭で出した問題を改めて見てみます。 hash1 = { a: 'hoge', b: 'fuga', c: 'piyo' } hash2 = hash1.slice!(:b) hash2 # => ??? ! をつけることでレシーバーを破壊的に変更する違いはあるものの、直感的には Hash#slice と同じ結果になりそうです。 実行してみる 早速実行してみました ちょっと見づらいので、整形します hash1 = { a: 'hoge', b: 'fuga', c: 'piyo' } hash2 = hash1.slice!(:b) hash1 # => {:b=>'fuga'} # 上記では実行していませんが、実際にはこうなる hash2 # => {:a=>'hoge', :c=>'piyo'} どうでしょうか。なんか思ってたのと違いませんか? 指定したkey, valueのペアがレシーバー側に残り、それ以外のkey, valueのペアが削除されています。(そして削除されたペアは、戻り値になっています) ActiveSupportが提供するHash#slice! 気になったので調べてみたところ、Railsの公式にちゃんと書かれていました。 Replaces the hash with only the given keys. Returns a hash containing the removed key/value pairs. なるほど。そういう仕様なんですね。 この仕様の違いを私なりに解釈してみると、視点の違いなのかなと思いました。 Rubyが提供する #slice は、レシーバーから特定の要素を「切り出す」イメージ( => 切り出した側に注目している) ActiveSupportが提供する #slice! は、レシーバーから特定の要素以外を「切り落とす」イメージ( => レシーバー側に注目している) Hash#extract!というメソッドがある ActiveSupportには Hash#extract! というメソッドが用意されています。 私が Hash#slice! に期待していた挙動は、実はこちらだったりします。 Removes and returns the key/value pairs matching the given keys. hash = { a: 1, b: 2, c: 3, d: 4 } hash.extract!(:a, :b) # => {:a=>1, :b=>2} hash # => {:c=>3, :d=>4} なるほど、extract(抽出する)であれば、レシーバーから要素を抽出(取り出す)するというイメージで違和感がありませんね。(抽出した側に注目している) つまり Hash#slice の破壊的メソッドは Hash#extract! ということになります。 まとめ ActiveSupportが提供している Hash#slice! は、その他の #slice, #slice! とは挙動が(直感的に)異なる Hash#extract! が(直感的に)他の #slice, #slice! に近い挙動になる 普段Rubyのコードを書いているとき 「破壊的変更だから ! をつければ良い」と考えていると逆の挙動になるので事故る いかがだったでしょうか。 私はActiveRecordのenumの実装を読んでいるときに Hash#slice! の挙動を見て違和感を感じ、この仕様を知りました。(もしかしたら、これまでにも無意識に使って事故ってたのかもしれませんが...) オープンソースのプログラムを読むのは勉強になりますね。
応用情報技術者試験に合格しました
こんにちは。山屋です。 先日、応用情報技術者試験に合格しました!今回は勉強法や受験して良かったこと等を書こうと思います。 応用情報技術者試験とは こちらにある通り、ワンランク上のITエンジニアのための試験です。 (他に詳しく説明している記事がたくさんあると思うので、ここでは簡単に説明します) 午前試験はマークシート式で広く知識を問う問題が、午後試験は分野を選択して記述式で深い知識を問う問題が出題されます。それぞれ60点以上が合格ラインです。 午後試験では、「情報セキュリティ」に加えて以下の分野から4つ選択して回答します。 経営戦略 プログラミング システムアーキテクチャ ネットワーク データベース 組み込みシステム開発 情報システム開発 プロジェクトマネジメント サービスマネジメント システム監査 私は午前試験が68.75点、 午後試験が63点でした。(ギリギリ!) なぜ受験したのか 業務中にわからない用語やイメージしにくい事柄がたくさんあると感じていました。具体的にはデータベース、SQLについてです。 ITに関する幅広い知識が問われるこの試験の勉強をすれば解消できるかも、と考えて受験しました。 加えて、セキュリティ分野に興味があるのでその勉強もできればと考えていました。 勉強の進め方 学習は試験の約半年前から始めました。ただし途中で1ヶ月ほど学習をストップしたり、ほぼ学習しない期間があったりしたので実質3,4ヶ月ほどだと思います。 (私の場合は合格点ギリギリになってしまったので、もう少し学習量を増やした方が良かったですね…) 午前試験 教本(キタミ式イラストIT塾 応用情報技術者)を一通りざっと読む→過去問道場で過去問10年分を解く→理解が浅い分野を把握したらもう一度教本を読んで理解する→過去問道場を解く… という流れで学習を進めました。 人によると思いますが、私の場合は過去問が6割程度解けるようになったら午後試験の勉強を開始しました。ただし、時間経過で内容を忘れてしまうので午後試験の勉強を始めてからも午前試験の勉強を並行して行うようにしました。 午後試験 午後試験は選択制なので、まず回答する分野を考えました。 問題集(応用情報技術者 午後問題の重点対策)をざっと読んでみて、勉強したいまたは得意そうな分野を6分野ほどピックアップしました。(本番で難しい問題が出題された時に備えて多めの分野にしました) あとは問題集をひたすら解くだけです。収録されている過去問分が理解できるよう、繰り返し解きました。 勉強して良かったこと 受験するきっかけになった、業務中のわからなかった単語の意味を知ることができました。 具体的にはデータベース関連での「第○正規化」といった単語は聞いたことはあったものの実際にどんな表だったっけ…となっていたり、SQLの理解が全体的になんとなくだったりしていたのですが、理解が深まったと感じています。 まだ業務で試験で勉強したことがそのまま役に立ったという場面はないのですが、つい先日、認証に関する実装を検討する際にやることのイメージが掴みやすくなったと感じました。(具体的にはRSAといった暗号アルゴリズムの話は試験勉強で出てきたなと思いました) 応用情報技術者試験のように幅広い分野を学習することは、「全く知らない」ということを減らして初めてやることへの抵抗感を薄め、理解を早めてくれるのではないかなと個人的には考えています。幅広いことの単語を知ることができるので、調べることすらできないという状態になるのを避けられるかなと思います。 もう一つの受験の目的であったセキュリティ学習については、不正アクセスの手法や適切なネットワーク構成、OSI基本参照モデルなど基礎的なことが学べて良かったです。 以前の記事でTryHackMeでセキュリティ学習をしていて応用情報技術者試験の内容と被っているところがあると書きました。 TryHackMeは日本語版がないというデメリットはあるものの、アニメーションを用いてわかりやすい・ゲーム感覚で学習を進められるというメリットがありました。 セキュリティ学習という観点で見ると、日本語で他の分野も幅広く学べる応用情報技術者試験と、英語ができる人にとってはわかりやすくセキュリティに特化して学べるTryHackMeのどちらでも基本的なことは学べるのではないかなと思います。(私は英語が苦手なので前者の方が勉強になりました) 終わりに 何はともあれ一回で合格できて良かったです。 資格試験というお金がかかり制限時間もあるという環境で勉強することはプレッシャーではありますが、その分効率的に勉強できる面もあります。もし幅広い知識を身につけたいのであれば、(基本or応用)技術者試験を受験するのは選択肢に入れて良いと思います。 最後までお読みいただきありがとうございました。
7つの設計原理について 〜『プリンシプルオブプログラミング』を読んで〜
みなさんこんにちは!山屋です。2025年もよろしくお願いいたします。 さて、プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則という本を読んで印象に残った「7つの設計原理」について書いていきます。 『プリンシプルオブプログラミング』の概要 プログラミングに関するプリンシプル(原理、原則)を101個紹介している本です。プリンシプルごとに概要と、守るためにやるべきこと等が説明されています。 どのようなプリンシプルが紹介されているかは目次をご覧ください。 7つの設計原理の内容 実際の開発現場の分析から導出された、品質のよいコードのための「経験則」です。 この原理は主にコードレビュー時のチェック観点として使われます。 メンバーやシチュエーションによってコードレビューの観点がブレないようにするという目的があります。 1. 単純原理 概要 シンプルにこだわること。初心者でも読めるような一貫して単純なコードを書くようにする。 やるべきこと 自然なコードを心がける。高級なテクニックを使わず、単純なやり方で通すこと。 2. 同型原理 概要 形にこだわること。同じことは同じように扱い、例外を設けないようにする。例えば、モジュールにて数値の単位を統一したり、使用順序を統一したりすること。 やるべきこと 一貫性のあるコードを書くようにする。実力をアピールするために、独創的なコードを書くことはやめましょう。 3. 対称原理 概要 形の対称性にこだわること。「アクティブ」があれば「パッシブ」があるように、対になるものを持つようにする。 やるべきこと 「条件」がある場合、「反条件」の整合性も検討すること。加えて例外的な状況を極力排除すること。 4. 階層原理 概要 構造が階層であることにこだわること。物事の主従関係、前後関係などの階層関係を意識し、整理された関係性を構築すること。 やるべきこと コードの抽象レベルを意識して、1つの階層は同じ抽象レベルのものだけで構成すること。上位レベルから見たときに、下位レベルは「それを外部から見ている」ような視点で記述すること。 5. 線形原理 概要 処理の流れを直線にすること。スイッチでコードを制御したり、状態の数をむやみに増やしたりせずにコードの見通しを良くする。 やるべきこと 処理の流れをあちこちにジャンプさせず、上から下にコードが流れていくようにすること。処理の分岐を少なくすること。 6. 明証原理 概要 ロジックの明証性にこだわること。一見して正しい、と思えるようなコードを書く。 やるべきこと ロジックが明瞭なコードを書くようにする。そのために、ロジックが直感的でわかりやすいものにすること。また、コードだけで説明できない場合は別途ドキュメントや図、コメントを書くこと。 7. 安全原理 概要 安全性にこだわること。ありえないと思える条件についても考慮してコードを書く。 やるべきこと 全ての動作を洗い出して、それぞれが安全になるように考慮する。要件と機能を理解し、場合分けをコードに正しく落とし込むこと。 設計原理についての感想 業務でコードレビューをすることがあるのですが、どういう点を意識してレビューをすれば良いのか私の中で明確なルールがなかったため今回知ることができて良かったです。 今まではレビューでどんな処理なのかを追うことがメインになってしまっていて、あまり効果的な指摘ができていませんでした。(処理がわかりにくいところに問題が隠れがち、ということは知っていたのですが…) 設計原理の中で特に印象に残ったのは「6. 明証原理」です。 この本では設計原理は主にレビュー観点として紹介されていますが、コードを書く側でも意識すべきことでもあります。レビューにて「コードが何をやっているのかよくわからない」という指摘をもらうことがあり、これから意識しようと思います。 (他のプリンシプルについても触れますが)、わかりやすいコードを書くために「シンプルであること」や「名前重要」をまずは意識していこうと考えています。 終わりに 今回の記事では「7つの設計原理」について書かせていただきました。 この本ではあえて具体的なコード例は書かない方針で、実際にどうすべきかは自分で考える必要があります。ただ読んだだけではプリンシプルは身についていないので、つまりこれからが本番です。これらの原理をレビューや実装の際に意識して、少しずつ身につけていこうと思います。 最後までお読みいただきありがとうございました。


