月: 2023年3月

  • Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考:書評

    Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考:書評

    開発者向けの書籍『Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考』を読みました。 本記事では、本書の要点と私の感想も交えてまとめていきます。   この本は初心者から経験豊富なエンジニアまで幅広い読者にとって有益ですが、現実の開発現場ではさまざまな要因が影響を与えるため、適切な判断と柔軟な対応が必要かと思います。  

    はじめに

    近年、ソフトウェア開発の現場では、品質の高いコードを書くことが求められています。 本書『Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考』は、開発者が品質の高いコードを書くための考え方や技術を網羅的に紹介しており、現場で直接活用できる内容が多く含まれています。

    章ごとの要点

    以下に、本書の各章ごとの要点をまとめます。

    第1章: 良いコードと悪いコードの基本的な考え方

    この章では、良いコードと悪いコードの定義やそれらを判断する基準について解説されています。 良いコードとは、可読性、保守性、拡張性が高く、効率的で堅牢なコードのことをこの本では指しています。 一方、悪いコードは、読みにくく、保守や拡張が困難で、パフォーマンスや安全性に問題があるということが特徴です。

    第2章: コード品質を向上させるためのプログラミング原則

    この章では、SOLID原則やDRY原則など、コード品質を向上させるためのプログラミング原則が紹介されています。 これらの原則を遵守することで、可読性や保ち続性、拡張性が高いコードを実現することができます。

    第3章: リファクタリングによるコード改善

    リファクタリングは、コードの構造を変更することなく、可読性や保守性を向上させる手法です。 この章では、リファクタリングの重要性や具体的な手法が紹介されており、Martin Fowlerの「リファクタリング」などの他の資料とも相互補完的な関係があります。

    第4章: チームでのコード品質向上

    チームでのコード品質向上のための取り組みとして、コードレビューやペアプログラミングが紹介されています。 また、コーディングスタイルの統一やドキュメントの整備など、チーム全体での品質向上に役立つアプローチも解説されています。

    第5章: テスト駆動開発と自動化

    この章では、テスト駆動開発(TDD)と自動化の重要性が説明されています。 TDDは、テストを先に書くことで、コードの品質と保守性を向上させる開発手法です。 また、自動化により、ビルドやテスト、デプロイの効率化が実現されます。  

    感想

    私の感想として、本書は非常に読みやすく、実践的な内容が多く含まれているので、ソフトウェアエンジニアにとって有益な1冊だと思います。 特に、SOLID原則やリファクタリングに関する部分は、現場で直接活用できる知識が豊富に紹介されていて、非常に役立ちます。 ただし、実際の開発現場ではさまざまな要因が影響を与えるため、本書の内容を鵜呑みにせず、適切な判断と柔軟な対応が必要です。 また、開発者は継続的な学習やスキルの向上を心がけることが重要であり、本書を参考にしつつ、自身の経験や状況に応じて最適な方法を見つけることが求められます。 ただし、以下の部分は気になりました。

    • 一部の章が他の資料と重複している: 本書の内容の一部は、他の書籍や資料と重複しているため、すでにそれらを読んでいる読者にとっては新規性が低い場合があります。
    • 初心者向けの内容が少ない: 本書は経験豊富なエンジニア向けの内容が多く、初心者にとっては難解である可能性があります。
    • 個々のケースに対する具体的な解説が不足している: 本書では、一般的な原則や技術が紹介されていますが、特定のケースに対する具体的な解説が不足しているところがあるように感じました。
    • 実践のしやすさに関する懸念: 本書では多くの実践的な指南が提供されていますが、これらをすぐに現場で実践することが容易でない場合もあります。例えば、既存のプロジェクトで多くの技術的負債がある場合や、組織の文化が変更に抵抗する場合などです。このような状況では、開発者は段階的に改善を進めることや、組織全体の意識改革を促すことが重要です。
    • 学習の効果に関する懸念: 本書を読むことで、多くの知識や技術を習得できる可能性がありますが、それらを継続的に練習し、実際の開発現場で活用できるようになるまでには、時間と努力が必要かと思います。開発者は、継続的な学習やスキルの向上を心がけるとともに、定期的に知識を見直し、新たな技術や手法を取り入れることが重要と感じました。

    まとめ

    『Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考』は、ソフトウェア開発者にとって有益な書籍であり、多くの実践的な知識や技術が紹介されています。ただし、実際の開発現場ではさまざまな要因が影響を与えるため、適切な判断と柔軟な対応が求められます。 最後に、開発者は本書を参考にしつつ、自身の経験や状況に応じて最適な方法を見つけることが重要です。組織全体で品質向上の取り組みを行い、継続的なスキルアップを目指すことで、持続可能な開発を実現できるのではないかと感じました。  

  • WARNING: The command completed successfully but no settings of ‘sumito.tsukada’ have been modified.

    概要

    powershell を叩いて以下のようなエラーが発生した

    WARNING: The command completed successfully but no settings of 'sumito.tsukada' have been modified.

    調査した結果

    この警告メッセージは、PowerShellで実行されたコマンドが正常に完了したものの、

    「sumito.tsukada」という設定が変更されなかったことを示しています。

    つまり、コマンドは実行されましたが、特定の設定の変更が実際には行われなかった、または変更する必要がなかったということのようです。

    調査した限り、このような状況は、以下のような場合に発生することがあります。

    1. コマンドが正しく実行されましたが、既に設定されている値と同じ値が指定されたため、実際には変更がなかった。
    2. コマンドが正しく実行されましたが、条件に一致する設定が見つからなかったため、変更が行われませんでした。
    3. コマンドが何らかの理由で適用されるべき設定を見逃してしまった。

    この警告メッセージに対処するには、コマンドを再確認し、正しい設定が適用されるように修正するか、

    既に適切な設定がされている場合は、この警告メッセージを無視しても問題ありません。

    ただし、期待した変更が正しく適用されているかどうかを確認するために、関連する設定やログをチェックすることが推奨されているようです。

  • 子どもと自分もラクになる「どならない練習」の要約

    概要

    本記事では、「子どもも自分もラクになる「どならない練習」」の内容を要約し解説します。

    この本は、親子関係をより良いものにするために、どのように声をかけ、どのように接するべきかを詳しく説明しています。

    どならない練習の重要性

    親子関係において、どならずに子どもとコミュニケーションすることは非常に重要です。

    どなることで、子どもは心を閉ざしてしまい、親子関係が悪化することがあります。

    どならない練習をすることで、子どもとのコミュニケーションがスムーズになり、親子関係が改善されます。

    親の感情のコントロール

    どならない練習の第一歩は、親自身の感情をコントロールすることです。

    怒りやイライラを抑える方法を身につけることで、子どもにどならずに接することができます。

    感情をコントロールする方法として、深呼吸や瞑想などのリラックス方法が効果的と本書では書かれています。

    子どもの気持ちを理解する

    どならない練習では、子どもの気持ちを理解することも重要です。

    子どもの感情や考えを尊重し、共感することで、子どもは安心感を得られます。また、子どもの気持ちを理解することで、親は適切な声かけや対応ができるようになります。

    効果的なコミュニケーション方法

    どならない練習では、効果的なコミュニケーション方法を身につけることが重要です。

    具体的には、以下の方法が挙げられます。

    • 伝えたいメッセージを明確にする
    • 子どもの目線に合わせる
    • 質問や意見をオープンにする
    • 聞く姿勢を大切にする
    • ほめることを意識する

    これらのコミュニケーション方法を実践することで、子どもとの関係をより良いものにすることができます。

    状況に応じた対応

    どならない練習では、状況に応じて適切な対応をすることも大切です。

    例えば、子どもが落ち込んでいるときや、困っているときには、共感や励ましの言葉をかけることが重要です。

    また、子どもが喜んでいるときや、達成感を感じているときには、その気持ちを共有し、一緒に喜ぶことが大切です。

    長期的な視点を持つ

    どならない練習を続けることで、親子関係は徐々に改善されます。

    しかし、短期間で劇的な変化を求めるのではなく、長期的な視点で取り組むことが重要です。そのためにも、自分自身の成長や子どもの成長を楽しむことが大切です。

     

    まとめ

    子どもも自分もラクになる「どならない練習」について整理してまとめました。

    どならずに子どもとコミュニケーションすることが、親子関係をより良いものにする鍵となります。

    親子関係をより良いものにするために、「どならない練習」を続けていくことが大切です。

    子どもとのコミュニケーションがスムーズになり、親子の絆を深めることができるでしょう。

    どならない練習を通じて、子どもとの信頼関係を築き、共に成長しましょう。

  • 自分でできる子に育つ: モンテッソーリ教育とレッジョ・エミリア教育のほめ方と叱り方

    概要

    モンテッソーリ教育とレッジョ・エミリア教育におけるほめ方と叱り方について、オックスフォード児童発達学博士の知見をもとに解説しています。

    3歳から12歳までの子どもたちを対象とし、自立した子どもを育てるための方法を学ぶことができます。

     

    モンテッソーリ教育のほめ方と叱り方

    モンテッソーリ教育では、子どもの自主性と独立性を重視します。

    ほめ方は、具体的で明確に行い、子どもの努力や成果に焦点を当てます。叱り方は、子どもの自尊心を傷つけず、問題の行動に対してのみ行います。

    レッジョ・エミリア教育のほめ方と叱り方

    レッジョ・エミリア教育では、子どもの創造性と表現力を重視します。

    ほめ方は、子どものアイデアや表現に対して評価を行い、独創性を称賛します。叱り方は、子どもに対して共感を示し、問題の行動に対して改善策を一緒に考えます。

    自立心を育てるための共通のポイント

    モンテッソーリ教育とレッジョ・エミリア教育の両方で、以下の共通点があります。

    • 子どもの意見や感情を尊重する
    • 自主性や創造性を重視する
    • 問題解決能力を育てるために、子どもが困難に直面した際にサポートを提供する
    • 成長過程において失敗を許容し、その経験から学ぶ機会を提供する

    親の役割とサポート方法

    親として、以下の方法で子どもをサポートするよう書かれています。

    • 子どもとのコミュニケーションを大切にし、感情や意見を共有する機会を持つ
    • 子どもの興味や才能を見つけ、それらを伸ばす環境を整える
    • 自分でできることを任せることで、自立心を育てる

    年齢別のほめ方と叱り方のポイント

    3-6歳: ほめ方は具体的な言葉で励まし、叱り方は簡潔で分かりやすくする。
    7-9歳: ほめ方は成長や努力を評価し、叱り方は問題行動に焦点を当て、改善策を提案する。
    10-12歳: ほめ方は子どもの意見やアイデアを評価し、叱り方は子どもと共に解決策を考える。

    まとめ

    モンテッソーリ教育とレッジョ・エミリア教育のほめ方と叱り方を学ぶことで、自立心を持つ子どもを育てることができます。

    親として、子どもの意見や感情を尊重し、自主性や創造性を奨励することが大切です。

    年齢に応じたほめ方と叱り方を適用することで、子どもの成長に適切に対応しましょう。

  • 「チームトポロジー」で価値あるソフトウェアを迅速に開発する適応型組織設計

    概要

    「チームトポロジー 価値あるソフトウェアをすばやく届ける適応型組織設計」は、組織の適応性を高め、価値あるソフトウェア開発を迅速に行うための方法論です。

    この記事では、本書の内容を概観し、その鍵となる要素を紹介します。

    チームトポロジーの基本原則

    チームトポロジーは以下の4つの基本原則に基づいています。

    1. チームの第一原則:チームは、組織の基本単位であり、ソフトウェア開発の効率と速度に大きな影響を与えます。
    2. コンウェイの法則:組織の構造がシステムの設計に影響を与えることを表す法則です。組織の設計は、適切なコミュニケーションを促進し、効果的なソフトウェア開発を可能にします。
    3.  チーム間の相互作用:チーム間の適切な相互作用は、生産性と効率を向上させ、組織全体の適応力を高めます。
    4. 適応型組織設計:変化に対応する能力を持つ組織は、競争力を維持し、市場の変化に素早く対応できます。

    チームタイプ

    チームトポロジーでは、4つのチームタイプが定義されています。

    1. ストリームチーム:ビジネス価値を直接創出するチームで、顧客や利害関係者と直接関わります。
    2. プラットフォームチーム:ストリームチームが利用する共通のプラットフォームやサービスを提供するチームです。プラットフォームチームは、開発の効率を向上させ、標準化や再利用可能なコンポーネントを提供します。
    3. 複合チーム:ストリームチームとプラットフォームチームの間に位置し、両者をつなぐ役割を担います。複合チームは、特定の技術やドメインに特化し、ストリームチームに専門的なサポートを提供します。
    4. 使い捨てチーム:一時的な目的のために結成され、その目的が達成されると解散するチームです。使い捨てチームは、新しいアイデアや技術を試すために利用されます。

    チーム間の相互作用パターン

    チーム間の相互作用は、以下の3つのパターンに分類されます。

    1. コラボレーション:チームが共同で問題を解決し、新しいアイデアを生み出すための相互作用です。
    2. X-as-a-Service:あるチームが他のチームに対して、サービスを提供する形での相互作用です。サービス提供者と利用者との明確な境界が設定されます。
    3. ファシリテーション:あるチームが他のチームをサポートし、そのパフォーマンスを向上させるための相互作用です。

    組織の適応性を高める

    チームトポロジーでは、以下の方法で組織の適応性を高めることが求められます。

    1. 継続的に組織構造を見直し、市場や技術の変化に応じてチーム構成や相互作用を適応させます。
    2. 透明性と情報共有を重視し、チーム間のコミュニケーションを促進します。
    3. チームの自律性と責任を尊重し、個々のチームが独自の意思決定を行えるようにします。

     

    まとめ

    「チームトポロジー」の適応型組織設計は、ソフトウェア開発の効率と速度を向上させるための有力な手法です。

    チームの第一原則、コンウェイの法則、チーム間の相互作用、適応型組織設計の4つの基本原則に基づき、チームタイプや相互作用パターンを活用して組織構造を最適化します。

    継続的な組織構造の見直しや、透明性と情報共有の重視、チームの自律性と責任の尊重によって、適応力のある組織を構築できます。

    このような組織は、競争力を維持し、市場の変化に素早く対応できるため、価値あるソフトウェアを迅速に開発することが可能となります。

    適応型組織設計を実現する「チームトポロジー」は、組織の適応力を高め、価値あるソフトウェアを迅速に開発するための方法論です。

    今後のソフトウェア開発の現場で、この手法を活用し、競争力を維持し、市場の変化に柔軟に対応できる組織を構築しましょう。

  • 限りある時間を最大限に活用する方法:効率的な時間管理術

    概要

    私たちの時間は限りあるものです。そのため、時間を最大限に活用し、効率的に過ごす方法を学ぶことは非常に重要です。

    「限りある時間の使い方」の本を読んで要点を10個にまとめました。

     

    本書のまとめ

    この本(限りある時間の使い方)では、効果的な時間管理術が紹介されています。

     

    1. 目標設定と優先順位付け
      目標を明確に設定し、それを達成するための具体的なステップを計画することで、時間を有効に使うことができます。また、タスクの優先順位を決めることで、重要なものから順に取り組むことができます。
    2. 時間の見積もりとスケジューリング
      タスクにかかる時間を見積もり、スケジュールに組み込むことで、時間を最大限に活用できます。余裕を持ったスケジュールを立てることで、予期せぬトラブルにも柔軟に対応できます。
    3. 効果的なブレイクの活用
      短い休憩を適切なタイミングで取ることで、集中力を維持し、パフォーマンスを向上させることができます。ポモドーロ・テクニックなどの時間管理法を利用することで、効果的なブレイクの活用が可能です。
    4. タスクの集中処理
      同じ種類のタスクをまとめて処理することで、効率を高めることができます。例えば、メールのチェックや電話の対応を一定の時間にまとめることで、集中力を維持しながらタスクをこなすことができます。
    5. 無駄な時間の削減
      SNSやゲームなど、時間を浪費する要因を排除し、自分の目標に対して集中することが重要です。また、無駄な時間を削減するために、デジタルデトックスを試みることも効果的です。
    6. ディープワークの活用
      集中力を高め、効率的に仕事を行うためには、ディープワーク(集中して取り組む時間)を設けることが重要です。ディープワークの時間を確保するために、邪魔になるものを排除し、静かな環境を整えましょう。
    7. 時間管理ツールの利用
      時間管理アプリやツールを利用することで、タスクの進捗やスケジュールを一目で把握できます。これにより、時間を効率的に使うことができます。
    8. 自己評価とフィードバック
      定期的に自分の時間管理能力を評価し、改善点を見つけることが重要です。また、他人からのフィードバックを受け入れ、自分の時間管理スキルを向上させましょう。
    9. 習慣化と継続
      効果的な時間管理を継続するためには、新しい習慣を作り、それを維持することが大切です。毎日の習慣を築くことで、時間管理能力が自然と向上していきます。
    10. 柔軟性の維持
      状況が変わることを前提に、スケジュールやタスクに柔軟性を持たせることが重要です。変化に対応できる柔軟な時間管理が、ストレスを減らし、効率的な時間の使い方をサポートします。

     

    最後に

    時間は私たちにとってかけがえのない資源です。

    この記事で紹介した効率的な時間管理術を実践し、限りある時間を最大限に活用して、人生の目標や夢に向かって前進しましょう。

    一歩ずつでも確実に進んでいくことが、最終的な成功への鍵となります。

    自分だけの時間管理法を見つけ、毎日を充実させることをお祈りしています。

  • Pythonによる日付の操作方法について – datetimeとtimedeltaの使い方

    Pythonのdatetimeモジュールは、日付や時刻を操作するためのクラスを提供しています。

    このモジュールを使用して、日付の計算やフォーマットを簡単に行うことができます。

    from datetime import datetime, timedelta
    
    # 現在の年月を取得
    now = datetime.now()
    this_month_str = now.strftime('%Y%m')
    
    # 先月の年月を取得
    last_month = now - timedelta(days=now.day)
    last_month_str = last_month.strftime('%Y%m')
    
    # 10週間前の年月を取得
    ten_weeks_ago = now - timedelta(weeks=10)
    ten_weeks_ago_str = ten_weeks_ago.strftime('%Y%m')
    
    # 今月日付を取得
    today_str = now.strftime('%Y%m%d')
    
    print('今月:', this_month_str)
    print('先月:', last_month_str)
    print('10週間前:', ten_weeks_ago_str)
    print('今日:', today_str)
    

    出力結果

    今月: 202303
    先月: 202302
    10週間前: 202301
    今日: 20230316

    datetimeモジュールから現在の日付を取得します。

    ここでは、nowメソッドを使用して現在の日付と時刻をdatetimeオブジェクトとして取得します。

    その後、strftimeメソッドを使用して、年月のみを表す文字列を生成します。

     

    timedeltaモジュールは現在を軸に先月の日付や10週間前の日付を相対的に計算することができます。

    timedeltaは、日付や時間の差分を表すオブジェクトです。

    ここでは、daysやweeksを指定して、現在の日付から指定した期間だけ引いた日付を取得しています。

     

  • Poetryでインストールしてあるパッケージのバージョンを変更する

    Poetryでインストールしてあるパッケージのバージョンを変更する

     

    poetry addコマンドで新しいバージョンを指定してパッケージをインストールします。例えば、requestsパッケージのバージョンを2.26.0に変更する場合は、以下のようにします。

    poetry add requests==2.26.0
    

    このコマンドを実行すると、指定したバージョンのパッケージがインストールされます。

    poetry lockコマンドでpoetry.lockファイルを更新します。これにより、新しいバージョンのパッケージがプロジェクトで使用されるようになります。

    poetry lock
    

    poetry installコマンドで、poetry.lockファイルに従ってパッケージを再インストールします。

    poetry install
    
    以上の手順で、Poetryでインストールしてあるパッケージのバージョンを変更することができます。
    
    
    
    
  • ValueError: Public Client should not possess credentials

    python で AzureAD の認証をする際 msal を使うことが多いが、

    PublicClientApplicationクラスに証明書を渡すと、

    ValueError: Public Client should not possess credentials というエラーになる。

    対処法として ConfidentialClientApplication クラスを使うことで回避できる。

    PublicClientApplicationクラスはパブリッククライアントを表し、アプリケーション自体が認証されることはないため、証明書の提供はサポートされていない。

    証明書ベースの認証には、ConfidentialClientApplicationクラスを使用する必要がある。

    このクラスは機密クライアントを表し、アプリケーション自体が認証されるため、証明書の提供が必要となるという理由

    以下、サンプルコード

    from msal import ConfidentialClientApplication
    
    client_id = 'YOUR_CLIENT_ID'
    tenant_id = 'YOUR_TENANT_ID'
    client_secret = 'YOUR_CLIENT_SECRET'
    authority = f'https://login.microsoftonline.com/{tenant_id}'
    
    app = ConfidentialClientApplication(
        client_id=client_id,
        client_credential=client_secret,
        authority=authority
    )
    
    result = None
    result = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
    
    if "access_token" in result:
        print(result['access_token'])
    else:
        print(result.get("error"))
        print(result.get("error_description"))
        print(result.get("correlation_id"))