超速で成果を出す アジャイル仕事術

たまたま手にとったので読んだ。

著者の方はソフトウェア開発のマネジメント経験があって、タイトルの「アジャイル」もソフトウェア開発の「アジャイル」の文脈に沿っている。 内容的には特別新しい観点が書かれているわけではないが、体系だてて整理して述べられている印象はあった。

本書の中では仕事術として重要なスキルとして「構想力」「俊敏力」「適応力」「連携力」「共創力」の5つが挙げられているが、自分は最後の「共創力」が特に弱いと感じる。直近4年間ほどで本業2社(サイバーエージェント、ナイルワークス)、副業7社の9つの会社で仕事をしてきた。どの会社でも、個人としてはそこそこアウトプットは出せる。だけどチームとして、異なる専門性を持った個人が集まった集団として、単なる個人のかけあわせ以上の仕事の成果が出せてきたかでいうとあまり実現できていない。 個人としてスキルを磨くだけではなくて、他人と共創して自分一人×時間では決してなし得ない仕事をできるようになりたいと思っている。 その課題感にあったヒントがあったように思った。 ポイントを要約すると「互いに興味を持ち、質より量で情報を共有しあい、対話によって価値観の違いを理解しあい、ビジョンと行動原則に落とし込むこと」と理解した。 リモートで最低限のタスク管理だけしているとこれは実現できない。

terraformでrandom_passwordで作ったパスワードを参照する

またあとで自分で調べそうなのでメモ。

terraformにはrandom_passwordという便利なリソースがあって、ランダムパスワードを生成してRDSの起動時などに使うことができる。

https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password

このパスワードを一時的に参照したいときは、backendのS3のファイルを直接参照するなどすればもちろん見れるわけだけど、CLIだけで済ませたい。

outputとnonsensitiveの組み合わせでいける。

output "master_password" {
  value = nonsensitive(random_password.master.result)
}

これでterraform planすることで表示される。

Changes to Outputs:
  + master_password = "xxxxxxxxxxxx"

You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.

terraform applyはせずに消す。

terraform stateに含まれることには違いないので、初期構築時にだけ使い、あとでパスワードは必ず変更する。

複数のGitHubアカウントでgit と ghコマンドをそれぞれ使い分ける

例えば ~/git/work/以下で仕事、~/git/personal以下で個人のGitHubアカウントで作業したいということがある。

gitコマンドにおいてGitHubアカウントを使い分ける情報自体はそこそこ豊富にある。その中でディレクトリベースで使い分ける方法を選んだ。 gitconfigのincludeIfディレクティブで切りかえられる。

ディレクトリベースで GitHub アカウントを切り替える https://zenn.dev/ytk6565/articles/github-accounts-based-on-directories

ただこれだとgitレポジトリであるディレクトリにしか作用しないので、レポジトリをcloneする前だと設定が有効にならない。

そもそも私はGitHubからのcloneのときはghコマンドを使っている。そこでghコマンドも複数アカウントで使い分けられるようにする方法がないか調べた。

いろいろググった結果、この方法がうまくいった。

GH CLI multi-account switch · GitHub

gh work とか gh personal と打つとアクティブなアカウントが切り替わる。

PostgreSQLでテーブルごとの行数(概算)を表示

MySQLでいうshow table statusのようなことがしたいときがよくあるのでメモ。

select c.relname, c.reltuples
from pg_class c
inner join pg_tables t on c.relname = t.tablename
where t.schemaname = 'public'
order by c.relname;

追加で t.tablename like でテーブル名をしぼりこめる。

show table statusと同じく概算であり、正確な行数をあらわしてないことに注意が必要。

2022/01/13追記

詳しく書いてある PostgreSQLのテーブルサイズの調べ方 - RAKUS Developers Blog | ラクス エンジニアブログ https://tech-blog.rakus.co.jp/entry/20190918/postgresql

AtCoder Beginner Selection

練習として一通りやってみた。

f:id:road288:20220103032145p:plain

  • 「ABC049C - 白昼夢」は3回Failしたけど結果的には解けた(ケースのバリエーションの考慮が足りずに実行時エラーになっていた)
  • 最後の「ABC086C - Traveling」は解けなかったので答えを見た。パリティに関する問題で、これくらいは実務で普通に扱いそう。
  • それ以外は普通にできた。

勉強していかないとランクを上げていくことは難しそうだが、ひとまず次のビギナーズコンテストに出てみよう。

GitHub ActionsでAWS OIDC Providerを使ってAssumeRoleする設定のCDK版

詳しいことは下記の記事に書いてあってとても助かった。CDK版は探した感じ無かったので自分で書いたので共有。

GitHub Actions OIDCでconfigure-aws-credentialsでAssumeRoleする | DevelopersIO

GitHub Actions が OpenId Connect に対応したので AWS OIDC Provider と連携する - tech.guitarrapc.cóm

import * as cdk from '@aws-cdk/core'
import * as iam from '@aws-cdk/aws-iam'

/**
 * GitHub actionsから呼び出すOIDC providerとiam roleを作成する。
 * https://github.com/aws-actions/configure-aws-credentials#sample-iam-role-cloudformation-template
 */
export class GitHubOIDCStack extends cdk.Stack {
    constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
        super(scope, id, props)

        const gitHubOIDCProvider = new iam.OpenIdConnectProvider(this, 'GitHubOIDCProvider', {
            url: 'https://token.actions.githubusercontent.com',
            clientIds: ['sts.amazonaws.com'],
            thumbprints: ['a031c46782e6e6c662c2c87c76da9aa62ccabd8e']
        });

        const principal = new iam.FederatedPrincipal(gitHubOIDCProvider.openIdConnectProviderArn, {
            "ForAnyValue:StringLike": {
                "token.actions.githubusercontent.com:sub": [
                    `repo:${organization}/${repoName1}:*`,
                    `repo:${organization}/${repoName2}:*`,
                ]
            }
        }, "sts:AssumeRoleWithWebIdentity")

        const iamRole = new iam.Role(this, 'GitHubActionRole', {
            assumedBy: principal,
            managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName("ReadOnlyAccess")],
        })
    }
}

個人的に気になったAWS update

AWS re:inventの季節で、大量のAWSのアップデートがあったが個人的に気になるもの、あとで実際に使ってみたい・置き換えたいと思っているものをメモ。

S3イベント通知がEventBridge経由でできる

New – Use Amazon S3 Event Notifications with Amazon EventBridge | AWS News Blog https://aws.amazon.com/blogs/aws/new-use-amazon-s3-event-notifications-with-amazon-eventbridge/

これまでってS3バケットに対して直接設定しなければいけなかったはず。 同じルールで複数の呼び出しができず、どれか1つのlambdaとかSNSに送って、そこから分配する必要があった。 これがEventBridge経由でできるようになると、ルールも書きやすくて管理しやすくなりそう。

いますぐ東京リージョンで使える。

AWS Backupを使ってS3をバックアップでできる

プレビュー– AWSBackupがAmazonS3のサポートを追加| AWSニュースブログ https://aws.amazon.com/blogs/aws/preview-aws-backup-adds-support-for-amazon-s3/

S3には貴重なデータが置いてあることが多いので、確実にデータを保護したい。重要なデータのバケットにはバージョニングを設定するのは当然としても、これまでだとある日時の状態にS3を戻したいとしても、オブジェクト単位のバージョンから過去のデータを復元することはできたが、一括でいつの時点のデータに戻す、はできなかったと思うが、それができるようになる。

tagをつけるだけでバックアップ適用できるのもよさそう。

現時点ではオレゴンリージョンでしか使えない。

DevOps Guru for RDSでAurora関連の高負荷時の調査ができる

New –RDSがMLを使用してAmazonAurora関連の問題を検出、診断、解決するためのAmazon DevOps Guru | AWSニュースブログ https://aws.amazon.com/blogs/aws/new-amazon-devops-guru-for-rds-to-detect-diagnose-and-resolve-amazon-aurora-related-issues-using-ml/

Auroraはほとんど任せっきりで運用できるのだが、たまに高負荷になったときにすばやく対応しないといけないときに助けになるかもしれない。

ただ上位のSQLなんてスロークエリみたり実行スレッドの状態を見ればいい気がするが、それをCLIログインしなくてもすぐ見られるのは良いかもしれない。

東京リージョンでいますぐ使える。

VPCのネットワークアクセス分析

New – Amazon VPC Network Access Analyzer | AWS News Blog https://aws.amazon.com/blogs/aws/new-amazon-vpc-network-access-analyzer/

セキュリティチェックの一環として使う機会があるかも、くらい。

CDK バージョン2

Announcing General Availability of Construct Hub and AWS Cloud Development Kit Version 2 | AWS News Blog https://aws.amazon.com/blogs/aws/announcing-general-availability-of-construct-hub-and-aws-cloud-development-kit-version-2/

CDK2.0がでた。2022/6/1まではv1もアクティブにサポートされるとのこと。

Migrating to AWS CDK v2 - AWS Cloud Development Kit (CDK) v1 https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-v2.html

CDK v2 requires v2 or later of the CDK Toolkit. This version is backward-compatible with CDK v1 apps

とあるので、普通にバージョン2にただちにアップグレードしても大丈夫そう。

今のところ、package.jsonでライブラリを個別に入れなくてすむ、くらいのメリットしか分かってないが。

AWS Data Exchange for API

AWS Data Exchange for APIの発表:一貫した認証を備えたサードパーティAPIを検索、サブスクライブ、および使用する| AWSニュースブログ https://aws.amazon.com/blogs/aws/data-exchange-for-apis-find-subscribe-use-third-party-apis-consistent-authentication/

こういうのって別に使わなくてもいいし、余分なレイヤーを一枚かませるだけにも思える。 IAMで認証できるから認証機構を個別にばらばらにしなくてよいのはメリット。

サーバーレスRedshift

Introducing Amazon Redshift Serverless – Run Analytics At Any Scale Without Having to Manage Data Warehouse Infrastructure | AWS News Blog https://aws.amazon.com/blogs/aws/introducing-amazon-redshift-serverless-run-analytics-at-any-scale-without-having-to-manage-infrastructure/

BigQueryが使いたい、Athenaは使い勝手悪いとずっと思っている。これは1つの解決策になるのか、試したい