投稿者: sumito.tsukada

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

    概要

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

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

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

    チームトポロジーは以下の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")) 
    
  • 「AWSではじめるデータレイク」を読んだ

    「AWSではじめるデータレイク」は、AWSを使ってデータレイクを構築する方法について詳しく解説された書籍である。本書は、AWSのデータレイクについて初心者から中級者までのユーザーに向けて、豊富な事例や具体的な手順を示しながら、データレイクの概念や構成要素、設計方法などについて詳細に解説している。

    本書の特徴の一つは、AWSのデータレイクを利用するメリットや機能面の解説が非常に丁寧であることだ。また、AWSのサービスを組み合わせて、スケーラブルで堅牢なデータレイクを構築するためのベストプラクティスについても解説されている。さらに、実際のビジネスケースを通じて、データレイクがどのように活用されるかもわかりやすく説明されている。

    本書で取り上げられたデータレイクの構成要素は、ストレージ層、処理層、分析層、セキュリティ層の4つである。それぞれの層の機能や使い方について、AWSのサービスを活用した実践的な手順が解説されている。例えば、ストレージ層では、S3やGlacierなどのAWSのストレージサービスを使って、データの保管やアクセス方法について詳しく解説されている。

    処理層では、EMRやLambdaなどのAWSのサービスを使って、データの加工や変換方法について解説されている。分析層では、RedshiftやAthenaなどのAWSのデータ分析サービスを使って、データの分析や可視化方法について解説されている。また、セキュリティ層では、IAMやKMSなどのAWSのセキュリティサービスを使って、データの保護やアクセス制御方法について詳しく解説されている。

    本書の内容は非常に実践的であり、データレイクの構築に必要なスキルや知識を習得する上で非常に役立つ。AWSのサービスを組み合わせることで、大量のデータを効率的に扱うことができるため、データ分析やビジネスインテリジェンスの分野での活用において、非常に有用な知識となる。また、本書で紹介されたベストプラクティスを活用することで、スケーラビリティや可用性など、データレイクを構築する上での課題に対しても十分な対応が可能となる。

    さらに、本書ではAWS以外のデータレイクの構築方法やツールについても言及されており、AWS以外の環境でもデータレイクを構築する際に役立つ情報が得られる。また、データレイクの構築におけるトラブルシューティングやパフォーマンスチューニングのポイントについても詳しく解説されているため、実際の運用においても非常に参考になる。

    一方で、本書はAWSを利用する上での基本的な知識があることが前提となっており、AWSの初心者にとっては難易度が高い可能性がある。また、本書で紹介されたAWSのサービスや機能が、新しいバージョンにアップデートされた場合には情報が古くなる可能性もあるため、最新の情報を得るためにはAWSのドキュメントや公式の情報源を参照する必要がある。

    総じて、本書はAWSを使ったデータレイクの構築に興味がある方や、既にAWSを利用している方にとって非常に有用な一冊である。豊富な実践的な事例や手順が示されており、AWSのデータレイクを効果的に活用するためのノウハウが詳しく解説されているため、データ分析やビジネスインテリジェンスの分野での活用を目指す方には、必読の書と言える。

  • [: 1: unexpected operator

    github actions で [: 1: unexpected operator というエラーが出た時の対処法を紹介。

    原因はshell が POSIX に準拠していないため起こる。

    POSIX に準拠している構文かどうかは checkbashisms コマンドで確認することができる。

     checkbashisms hogehoge.sh
    possible bashism in hogehoge.sh line 16 (should be 'b = a'):
        if [ $exist == 0 ] ; then
    

    この構文が問題であることがわかった

    上記の通りアドバイスをくれる。

     if [ $exist == 0 ] ; then
    

    今回はアドバイス通りではなく

    if [ $exist -eq 0 ] ; then

    と変更して対処した。

  • docker remote repository に image があるか確認する

    dokcer manifest inspect を使って確認することができる

    $ docker manifest inspect $IMAGE_NAME:$IMAGE_TAG
    

    上記コマンドを実行して、イメージが存在していると

    {
    	"schemaVersion": 2,
    	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    	"config": {
    		"mediaType": "application/vnd.docker.container.image.v1+json",
    		"size": 9641,
    		"digest": "sha256:xxxxxxx"
    	},
    	"layers": [
    

    というレスポンスを返す

    存在しない場合は以下のようなレスポンスになる

    no such manifest:
    

    そのため

    $ docker manifest inspect $IMAGE_NAME:$IMAGE_TAG > /dev/null ; echo $?
    

    で存在確認が可能

  • argocd login 実行時の TOKEN の保存場所

    argocd で CLI でログインした場合の TOKEN が発行されるがその格納先について

    以下のコマンドでログインした場合

    argocd login argo.sumito.jp:443 --sso

    TOKEN はこちらに格納される

    ~/.config/argocd/config
    
    users:
    - auth-token: xxxx.xxxx.xxxxx
      name: argo.sumito.jp:443
      refresh-token: xxxxx
    

    これを TOKEN に設定することで API にアクセスが可能

    curl -X GET -H "Content-Type: application/json" "https://$ARGOCD_SERVER/api/v1/applications" -H "Authorization: Bearer $ARGOCD_TOKEN"
    

  • qemu: uncaught target signal 11 (Segmentation fault) – core dumped

    m1/m2 mac に powershell のコンテナを動かして powershell の modules をインストールすると、core dump を吐いて止まってしまうことがある。その対処法を紹介。

    /# pwsh -Command Install-Module -Name Microsoft.Graph -F
    qemu: uncaught target signal 11 (Segmentation fault) - core dumped
    Segmentation fault
    

    イメージを lts を利用することで回避ができた

    docker run --platform linux/x86_64  -it mcr.microsoft.com/powershell:lts-ubuntu-22.04 /bin/bash
    Unable to find image 'mcr.microsoft.com/powershell:lts-ubuntu-22.04' locally
    lts-ubuntu-22.04: Pulling from powershell
    Digest: sha256:cb32194aa46f144c09c1a6610eee2684e3642b8609370aba927ab995b413931f
    Status: Downloaded newer image for mcr.microsoft.com/powershell:lts-ubuntu-22.04
    root@6d03d590fb19:/# pwsh -Command Install-Module -Name Microsoft.Graph -F
    root@6d03d590fb19:/#