GitHub CLIをインストールしてみた

お供養

GitHub CLIをインストールしてみた。

もともとBranch protection ruleを設定するためだったのだが、いろいろ調べてみると、これはブラウザからやるほうが早いという結論になってしまったので、今回はお蔵入りに。

ただログインまでは持って行ったので、いずれ使うこともあるかもしれないということでメモしておく。

インストール

  • インストール
  • gh pr statusでインストールできていることを確認
  • gh auth loginでログインする

こんな感じ。これで無事ログインできた。

> gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser

便利そうなんだけどなあ。

AIをライティングに活かせる時代

プログラミングの手助けに、と思ってCopilotを導入したところ、なんと記事のライティングも手伝ってくれるようになった。

Copilotを記事作成の手助けに

プログラミングを手助けしてくれるCopilotだが、実は記事のライティングにも使える。というか、使えた。

これがなかなか悪くない。たとえば、この記事のまさにここで「こうして」と書くと

こうして書いているのはCopilotのおかげだ。これはまさにAIがライティングに活かせる時代だ。

とまあ、ここまで補完してくれる。Copilot氏はかなり自信家であるご様子だが、最新鋭のAIであるから、それくらい自己評価が高くてもよいのかもしれない。

実際どの程度使えるものなのか?

結論から言うと、それなりの実用度、と言ったところである。たまにジャマになる。おかしな方向に文を持っていかれることもあるし、ループしているのか同じ文をずらずら並べる奇妙な挙動を示すこともある。

だが、上手く先回りしてくれて楽ができることもよくあり、すくなくとも自分はこの機能をオフにしたいとは思わない。

     これはかなりの実用性だ。

(推敲前だが、ここでCopilot氏はこう合いの手を入れた!)

どのような分野でも対応できるのかはわからないが、少なくともIT系の記事を使う分には悪くない補完をしてくれる。

ついにAIもここまで来たか、と感慨深いものがある。進化の速さには驚くばかりだが。

Copilotはまだβ版で、まだまだ不完全な部分がある。しかし、これからどのように発展していくのか、楽しみである。

(↑これは、最後になにか語らせようと思って、「copilot」と打って後を補完させたもの。実際にはすでにCopilotはGAしている。時折古い情報や間違った情報を混ぜこんでしまう点には注意が必要だ。本人の中ではまだβ版なのかもしれないが)

【雑記】マイナンバーカードの健康保険証利用を登録したことなど

このところブログの更新が滞っているため雑記だけでもと思い、記す。

DX化は進んでいる

タイトルの通り、マイナンバーカードの健康保険証利用を登録した。ポイントに釣られた。

それ自体は私事なのだが、驚くべきことに登録が簡単だった。手続きが数分で終わった。驚くことか、と思うかもしれないが、もちろんだ。かつてこの手の公的サイトは利用者の利便性を無視するのが通例であった。劣悪なUXに耐えて必要な手続きに辿りつける、ある種の苦行者だけが利用できるものであった。だから今回も1時間2時間は覚悟していた。それが数分で終わったのだ。驚かないことがあるだろうか。

前の記事の通り公官庁のデジタル化の進捗はあまりよくないという話を読んだばかりだったので、これは嬉しい誤算だ。UXは大いに改善されていた。公官庁のDX化はどうやら本気のようだ。ありがたいことである。

技術系同人を書いているとブログ書けないという話

ちびちびとAWS系の技術同人を書き進めているわけだが、お陰でブログの更新が滞っている。さすがに両方書くのは厳しい。ただこれはこれで困るので、書いている内容を元にブログ記事しようかと思う。書き方を合わせる時間がかかるが――ブログはである調、同人はですます調――しかたない。

物価連動国債

すこしくらいインフレをヘッジしとくべか、というわけで物価連動国債を扱う投信を買うことにした。といってもそんな大きな額にはしないので、本当にちょっとした保険といったところ。むしろヘッジコストのほうが嵩む可能性もある。

だが、この場合そうなったほうがむしろ総合的に見て幸せだろう。このような警戒は役に立たずに終わるのが一番だが、はてさて。

仏閣見学

ある人から近所にある真言宗のお寺がなかなか良いと聞き、見学に。護摩壇を生で見ることができプチ感動。別段お寺に詳しいわけではないのだが、禅系のお寺と密教系のお寺は同じ仏教系の施設でもかなり趣が違うように感じられる。リモートでかなりのことができるようになった昨今だが、実地を見なければ気づかないこともまだまだあるもの。

『2040年の日本』を読む

『2040年の日本』を読んだ。落ち着いた筆致の良書。しかし、淡々と事実を押さえるだけでかくもシビアな内容になるか、と驚く書でもあった。

読みながら感想を書いていく。

  • ここ10年くらいの振り返りから。
    • 労働人口は減っていき、設備投資は最小限、というデータだそうな
      • たしかに設備投資は周囲を見回してもそんな感じがある。しても補修くらいで新規導入はほぼない、みたいな。
    • 命綱はデジタル化
      • 今はやりのDXだろうか。
        • 自分はIoT、AI、ロボットが鍵だと思っている。無数のIoTで感じ取り、中央のAIで判断し、各地のロボットたちが実行する。バーチャルの世界だけでなく、リアルの世界でも、自動化、自動化、自動化。
          • 自分もなにかできると良いのだが。
      • ここはIT業界にいるものとして嬉しいポイント。仕事はまだまだある! 止まったら死ぬマグロのように勉強し続けないといかんけど。
  • そしてこれから
    • 少子化が進む
      • 若者の価値が上がるだろうが、若者むけのサービスを成り立たせるのが今より大変になる、ということでもあるだろう。
        • 単純にマーケットが小さくなるので。
          • 端的に高校とか大学とか学習塾とかは大変そう
            • ただそれでも、デジタル化のためには教育が絶対必須なわけで、ビジネスチャンスはある気もする
      • 今から出生率が上がっても今から20年間くらいの問題解決にはならない
        • 赤子が労働人口になるまで20年前後かかるからこれは当然
          • だからってほったらかすと20年を超えた先で地獄が待っているわけだから放置もならないと思うが。
    • 高齢化も進む
      • ですよね
  • 途中まとめ。莫大な高齢者達を支えるためには莫大な富が必要だが、今のままでは用意できない。そこで女性、高齢者を働かせるとともに、デジタル化を進め、もって富を用意すべし、ということらしい。
    • どうだろう。それでも結局、社会保険の水準を持続可能なレベルにまで調整するのは不可避じゃなかろうか。
      • ツケを全員で払う(保険料を払う人も保険金を貰う人も)未来がやってくるだろうし、それが一番マシな選択という気もする。
  • 海外にも目を向けると、将来もやっぱりアメリカが強いとのこと
    • そうだろう。
    • さらに中国・インドも強い
      • そうだろうそうだろう。
      • 中印への投資には夢を感じる。今はタイミングが良いと思えないので動きたくないが。
      • ただし一人当たり潜在GDPでいうと日本のほうがまだ高くなるだろうとのこと。
        • ここは素直に日本スゴイと言っていいんじゃなかろうか。
        • といってもGDP自体は、中国が相当伸びると予想されるらしい。これもそうだろうと思う。
  • 円安により日本はドルベースだとやたら貧しい国に
    • 為替の影響もあるとはいえ、やはり厳しい数字には違いない。
      • それに、いずれ円安がまた進む可能性がかなりあると思う。今は円高に動いているけれども。
  • 社会保険問題
    • 前述の通り。入出金を両方調整しつつルールを改める。その後は耐える。
    • 社会保険のそもそもの目的はリスクのプーリング。
      • すごく同感。
      • が、年を取るとほぼ100%誰でもどっかしら体が悪くなって当たり前。平均寿命がめっちゃ伸びたので、年金受給も普通のことになっている。これらはほぼ確実に起こるインシデントと言える。顕在化する可能性が極めて高いリスクに対して、平準化で対応することはできない。
        • という理由によっても、やはりドラスティックな調整が不可避と感じる。
  • 医療・介護分野ばかり肥大化する
    • それだけじゃ日本は食ってけないけどどうすんだ、的な指摘もされていた。わかる。無理じゃね?
  • メタバースの可能性
    • e-Govの発展形
    • セキュリティと、取引できるデジタル財の拡大が鍵?
    • リアルと繋ぐのも一つの役目らしい
    • もし社会インフラ化して皆が使うようになったとしたら、ものすごい影響を持つことになる
      • 大企業群と行政が一体化した上で全てを独占してメタバース経由でないとサービスを受けられなくなった状態をイメージすればいいだろうか。すごそう。
      • 個人的には、それはわざわざ全部VR化/AR化しないといけないのか、という疑問もある。認証を一元化しつつPC/スマホ両用の2Dアプリケーションを使えるようにすれば大半の用事は済むのでは?
  • DAO(分散型自立組織)
    • これはすでに萌芽があるのを自分も感じる。
      • どこまでできるのか、はまだわからない。
      • しかし仕組み自体は大変面白いと思う。未来を感じる。
  • 自動運転
    • いずれ実現するだろう、いつになるかはわからないが。
    • 人を乗せずにモノだけのせてもいい。
    • 実店舗が要らなくなるのでは、という点は、メリデメ両方ありそう。しかし生産者の工夫の余地が増えるのはたしかだろう。その点は自分にとって希望。端的に作る系の仕事が好きなので。
  • 電気自動車への移行も合わせ、今ある手動運転+ガソリン車を前提とした産業は激甚な縮小を強いられる
    • メーカーやタクシー業界はもとより、修理工場、駐車場など影響は方々に出る
      • 設備投資が厳しい立体駐車場を運営している企業は大変とのこと。
      • ガソリンスタンドもどうなるんだろう。
    • 一方で駐車場が減るだろうから地価が下がって土地が使いやすくなるかもしれないらしい。 いいことな気もするが、悲喜こもごもか。
    • 日本を支えてきた自動車産業の未来はあまり明るくないかもしれないらしい
      • やばい
  • エネルギー問題
    • ここは個人だとどうすることもできないし、所与の条件としてその場その場で対応するしかないかな
  • 新技術
    • 自動翻訳がいきわたれば国際間でデジタル移民が。IT業界にもインドの安い人材がリモート経由で日本に押し寄せるかも。
      • すでにインド人に限らず来ているが、量が今と比べ物にならないほど増えるかもしれない、ということだろう。これは同感。オフショアの範囲はおそらく今より広がるのではないか。
        • むしろ日本人がアメリカへリモート経由で出稼ぎに行くかもしれない。
    • フードテック
      • スマートアグリは本当に課題と思う。
      • できるなら自分もやりたい。
        • しかし収益性が厳しい農業で新式機械や仕組みを導入して採算をどうとるのか。問題は農家が新技術を受け入れられるかどうかとされているが、それ以前に採算があうかどうかだ。
          • ただ、今後円安と人口爆発による世界的な農産物の需給のタイト化が進み、海外産の食料品に頼れなくなったなら、あるいは国産の農作物の価格も相当に上がり、農業の採算が今よりとりやすくなるかもしれない。そうなればフードテックが導入しやすくなるかも。
    • 量子コンピュータ
      • 現行の公開鍵暗号鍵方式が通用しなくなるのはやばい
      • 一方で量子コンピュータのパワーを良いことに生かせれば素晴らしい成果があるのではないかという期待もある。
      • 何にしてもすごい時代である。
  • 新産業構造ビジョン
    • これかな
      1. デジタル化の進捗どうですか?
        1. 進捗ダメです!
        2. らしい。
        3. e-Taxみたいな例もあるから、公官庁も全部が全部だめじゃないんだろうけど。まあうん。
  • もう少し先があったが、ここから先はコメントすると筆が荒れるから控える。

総じて

暗い話題が多かったが、そうならざるを得ないだろうな、という印象。

世情が厳しさを増す中で、自分になにができるか、またなにをどこまですべきであり、なにをすべきでないか、というテーマは、自分含めて多くの日本人が直面することになりそう。

【Issue】AWS VPCを改めて考える

日頃当然のように利用しているAWS VPCを、整理の意味も兼ねて改めて考え直してみたい。

なおタイトルにIssueとついているのは『イシューからはじめよ――知的生産の「シンプルな本質」』を読んでいて感化されたため。

考えながら書いているので、冗長になるのはお許し願いたい。

そもそも論

そもそもVPCを用意しないといけないのはなぜか。この疑問を考えるにあたっては、比較したほうがわかりやすかろうということで、VPCが無い場合とある場合でどう違うのかを比較して考えてみる。

VPCがあるとなにが良いのだろうか。もしくは、ないとどうなるのだろうか。

  • 外部からの(または、外部への)通信を制限できる
    • もしVPCがなくて、全部パブリックIPをつけたEC2をポン置きしないといけないとすると(EC2-Classicはそれに近かったのかもしれない)、インターネット上からのアタックがそのまま叩きつけられる。セキュリティ的に大変恐ろしい状況だ。
    • その点、VPCのPrivateネットワークにEC2を配置すれば、通信経路は大いに限定できる。最小権限の原則も守りやすい。ちょっとくらいミドルウェアの更新が遅れても、通信が届かないなら安心である。もちろんアップデートが滞っているのは良いことではないのだが、必要となったら即アップデート、なんてことは、かなり頑張ってImmutableにしていないと厳しいことが多いだろう。
    • また逆に、内部からの不要な通信が外部に飛んでしまうことも防げる。
      • 開発中のアプリケーションに馬鹿馬鹿しいバグはつきものだ。しかもそれが事前にわからない。だがネットワーク的にガードされているとなればかなり安心できる。
  • 内部でもあやまった通信を制限しやすい
    • Product用のリソースとDevelop用のリソースも同じネットワークにいる状況は、ホラー映画よりも恐ろしい。うっかり開発中のアプリのバグによって本番用データベースのデータを破壊してしまったら地獄である。サービスの継続性にまで関わる。
    • その点、Product用のVPCとDevelop用のVPCを分けると、開発中のミスがエンドユーザにまで及ぶなんて悲劇をネットワーク的に防ぐことができる(完全ではないが)。
      • ネットワークが区切られていなくても、iptablesを使えばポートも接続元も制限できるわけだが、その管理はひたすら手間だ。個々のノードごとに管理しないといけない方式は、数が多いと管理が困難極まる。それに、たった一つの仕組みで守ると、その一つの仕組みがミスっていたらインシデントに繋がる。
        • iptablesはうっかり設定ミスをすると通信ができなくなる危険な代物なので、作業中は神経が削れる、という問題もある。リスクを軽減する方法もあるけれどもAnsibleなどの自動化ツールと組み合わせるのは結構辛そうな気がしている。
  • 通信の監視とロギングが容易
    • VPCフローログを使えば通信ログの取得が実にあっけなくできる。S3に保存すればいいだけな上、負荷のことにも気を配る必要もなく、素晴らしいの一言。
      • ログ収集サーバーを立ててそこに送って、となると大変である。そのログ収集サーバーがボトルネックとなってサービスが落ちたり遅延したりすることのないよう大変なリソースをつぎこまねばならない。その割に顧客に提供する価値が大幅に向上するわけでもなく、肩身が狭い。
  • Private IPアドレスが使える
    • IPv4では、使うノードすべてにPublicIPが必要な状況はコスト的に悪夢だ。
    • とはいえIPv6なら大した問題ではない。

まあ大体ここに書いてある通りではあるのだが、VPCのメリットは概ねセキュリティの維持にあると言ってよさそうだ(IPアドレスなど、当てはまらないものも若干あるが)。データ破壊などを防ぐことで「可用性」を、不要な通信をシャットアウトすることで「機密性」を、それによって間接的に「完全性」を得られるわけだ。

つまりVPCのポイントとは?

してみると、VPC構築の本質的な価値も同様に考えていい。3要素のうち特に可用性、機密性がポイントだろう。

可用性を維持できるようMultiAZを採用したり、通信ログを監視したり(間接的な繋がりだが)する。

そしてまた、通信権限を必要最小限にとどめるために、サブネットを切ったり、SecurityGroupを細かく設定したり、NATゲートウェイVPCエンドポイントなどの外部接続のための仕組みを用意したり(これがないと全部Publicにおかざるを得ないわけだから、これも通信権限を限定するための補助的な仕組みと言っていい。事実、ノードを全部Public Subnetに置いて通信も公開ネットワークをどんどこ飛び回っていいなら、NATゲートウェイVPCエンドポイントも必要ない)する。

その設計はセキュリティ確保に寄与するか?

それがVPC設計のキモと言っていいだろう。

もちろん、サブネットで確保したアドレス範囲が狭すぎて必要なノードが配置できない、なんてのは困るから、セキュリティしか考慮する点がないわけではないのだが。

技術同人を書いてみたい

かねてから技術同人を書いてみたいと思っていたので、ついに実行することにした。

のだが、エイヤでやろうとしたら行き詰った。

しょうがないので改めてちゃんと計画を練って出直すことにしたので、その検討時のメモを残しておく。後で見直して「こんなことも考えてたな」みたいな昔を懐かしむネタになるかもしれない。

何を書く?

それなりに業界に長くいるし(といっても二十年に満たないくらいだが)、書けることくらいあるだろう、と思っていたがこれが意外に難しかった。

まずAWS Well-ArchitectedやThe Twelve-Factor AppのようなBest Practice的なものはどうかと思ったが、これは自分がそもそも書けない。言うてもエンジニアリングに関わる中で自分なりのBestは追ってきたわけだが、それは自分が置かれた環境に最適化したものなのであって、汎用のBestPracticeとしてぶちあげられるかというと、それはまた別の話だ。あと既存のBestPracticeがよくまとまってるんだからそれでいいじゃんという説もある。

ではこれまで関わってきた他社プロジェクトの内容についてはどうか。なんてことは考えるまでもなく、もちろん書けない。ビジネスマナー上NGだ。

では自分でやってみた系はどうか。これは悪くない。ただ当たり前ながら、まずやってみる必要がある。すぐ書き始めるというわけにいかない。いずれやってみたいが、今回の件に間に合わない。

というわけで折衷案に行きついた。"WEBアプリケーションをド新規で作ると仮定して、その場合どんなインフラを構築し、運用手段を用意するか"である。商業誌でもよくある形式である。だがまた変わるかもしれない。

どう書く?

構成は?

結論、構成は抽象的なSummaryから具体的なDetailに落としていく方向で行くことにした。要旨を先に述べたほうが何が言いたいのかわかりやすいので自分好みだからである。

つまり全体像はこんなイメージで

  • 本の紹介
  • 概要
  • 個別テーマ
    1. 個別テーマその1
    2. 個別テーマその2
    3. ・・・
  • 付録
  • 参考文献

さらに個別のテーマは1)構築する順 2)重要性順で2段階に並べ替える。たとえばテーマがアプリ実行用環境ならこんな感じ。

  1. VPC
  2. ECS
  3. SES
  4. SNS
  5. ・・・

でもって、それらの項目はやっぱり抽象的なSummaryから具体的なDetailに落としていく。

  • 1.1 概要
  • 1.2 実現したいこと
  • 1.3 具体的な構築方法
  • 1.4 備考

だいたいこれでわかりやすくなるのではなかろうか。

文章の校正は?

やさにちチェッカーや校正ツールなどを使う。あとできれば他の人にも見てもらえるといいのだけどなあと思いつつ、まずはモノを作ってから物を言おうということで、当面は自分ひとりでガンバル。

どこで発表すんの?

書いてから考える。

マーケティングガン無視だが同人なら許されるであろう。

AWS KMSを復習してみる

KMSを改めて復習したくなったので、自前のメモがてらに記事にしてみる。

KMSとは?

データの暗号化やデジタル署名に使用するキーを作成して管理するマネージドサービス。

データの暗号化や複合などの処理まで行うというよりは(※)、キーの管理をメインとしているサービスである。

暗号化に使うキー(ファイル)の保管は、がっちりセキュリティを守ろうとすると難題で、「盗っ人に入られたらどうするんだ」なんてことまで気にしないといけなくなる。そういうことをしなくて済むのは大変ありがたい。

データキーの生成、暗号化、復号はKMS側で行うエンベロープ暗号化戦略を採用しているため。

AWS KMS はデータキーの生成時、即座に使用 (オプション) できるプレーンテキストのデータキーと、データと共に安全に保存できるデータキーの暗号化されたコピーを返します。データを復号する準備ができたら、最初に AWS KMS を要求して、暗号化されたデータキーを復号します。 AWS KMS はデータキーを生成、暗号化、復号します。ただし、AWS KMS はデータキーの保存、管理、追跡、またはデータキーの暗号化オペレーションを実行しません。AWS KMS の外部でデータキーを使用して管理する必要があります。データキーを安全に使用する方法については、「AWS Encryption SDK」を参照してください。(AWS KMS の概念

KMSで管理できるキーの種類と用途

また、暗号キーは2種・2用途に細かく分けられている。

KMSで管理できるキーには、単一の暗号化キーを使うSymmetric、秘密鍵と公開鍵を使うAsymmetricの2種がある。それぞれ1)データの暗号化・複合 2)改ざん検知 に用いるので、2×2で4つの組み合わせがある。

  1. Symmetric(共通鍵暗号方式)
    • Encrypt and decrypt(暗号化・複合)
    • Generate and verify MAC(生成と検証)
  2. Asymmetric(公開鍵暗号方式
    • Encrypt and decrypt(暗号化・複合)
    • Sign and verify(署名と検証)

Asymmetricのほうは公開鍵ももちろん取得できる。こんな感じのテキストデータである。

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhFAAOCAQ8AMIIBCkiG9w0BAQEgKCAQEAjQt/KIm5oEDQqy0pqzww
uaToJDAe1QPi45tD9D1+bzr0FSPo5LUrjEBlQ0gztLLFSibr10IEi9p0+QaNqEE7
8k9iTw/fWtHJpp+6z4gSq/rpARNkZSjZLXLdpAZlBNyjx9H8x8eKKEg0hZXkSiZR
piYEcsCVm1ikh4LHwXfeit7z6X2WTmQzeRjjS1Xj1qne22oBZb3Ar8KIq5a3xnVp
WAqPIAMqb1J9lawPg6QTP8SFd5PC9gbrwP6T+NRmUtY5Q5TQ/zHcGg0PXgqa/NjX
Eq4a5bYmPit4o4+WFaJXJBrO32DW35gcuhIKB0Ulnp7Lagkyb8CWZM8MswYV80ii
/QIDAQAB
-----END PUBLIC KEY-----

なお言うまでもなくダミーであり、私はこの公開鍵を用いていない:-)

暗号化と複合化はどのタイミングで行う?

AWSで使う場合、マネージドサービスが使うサーバーサイド暗号化と、自分たち利用者側で勝手に行うクライアントサイド暗号化がある。前者はKMSのキーを構築時に指定すれば透過的に使える一方で、後者は自らアプリケーションの中で処理を行う必要がある。

もちろんどちらもフリーランチではなく、負荷が増す。そのため数年前まで、クライアントサイド暗号化はもちろん、サーバーサイド暗号化も、意識の高い現場(もしくは業務上より高いセキュリティが必要とされる業務に携わる現場)でもないと割合省略されがちだったと思うが、昨今ではむしろ行って当然のものに変わりつつある印象である。これまでよりもKMSの重要性は高まっていると考えるべきだろう。

運用上の注意点は?

鍵の漏洩と消失が起こると悲惨なことになる。漏洩するとクラッカーが複合も改竄もできるようになってしまいうる。消失すると、そのキーを使っていたデータは使うことができなくなる。

従って、漏洩させないよう管理を厳にするとともに(最小権限の原則を実現するためのKMSでのアクセス制御)、漏洩しても被害を限定し(KMSのローテーション機能や異常検知の仕組みの整備)、かつトレーサビリティを確保すべく操作ログも残さないといけない(CloudTrailによる証跡の保存と、S3のオブジェクトロックやMFA deleteによる保護)。

また、うっかりミスで削除してサービスが復旧不能(本当にありえる!)にならない仕組みもいる。削除予定の鍵が使われたら通知する仕組みがこれにあたる。

AWS CloudHSM

CloudHSM というものもある。KMSでも歯が立たないほど際立って厳しいセキュリティ要件に対応するためのもの。

専用ハードウェアで処理を行うため大変堅牢なのだとか。ただし、それだけにお高い

参考