ブックマーク / zenn.dev/koduki (30)

  • ユニットテストってもう言わない! CI/CD時代のテスト分類に最適なテストサイズという考え方

    はじめに 以前からユニットテスト/単体テストという言葉は使いづらい、と感じており今回も旧Twitterで「テストを実行時間ベースで分類する良い言葉ないかなー」と呟いていたところ、「テストサイズのSMLって考え方があるよ」と教えて戴きました。 だいたいは教えてもらったt_wadaさんの記事にすべて書いてあるのですが、自分の整理も含めて動画にしたので、その補完記事となります。 TL;DR 単体テストのバベルの塔は既に崩壊 CI/CDでの継続的テストには時間ベースのテスト分類が重要 UT/IT/E2EではなくSMLによるテストサイズがCI/CDには合う それは単体テストか結合テストなのか? 自動テスト、手動テストに関わらずテストの分類として単体テストと結合テストという言葉は一般的です。 ITQBではTest Levelsという言葉で定義されていますし、以下のようなV字モデルの対応表はみんな知って

    ユニットテストってもう言わない! CI/CD時代のテスト分類に最適なテストサイズという考え方
  • クラウドでもsuが出来る! GCPにPAM(特権管理)がついに登場

    はじめに Linuxの良い所の一つにsuやsudoと言った特権管理の仕組みがあります。普段は通常アカウントで入って、例えばインストールなどの特権作業が必要な時だけsu/sudoで一時的な権限昇格が可能ですし、/etc/pam.dで誰がどのユーザにスイッチ出来るかなどは細かく制御できます。 一方で、クラウドの権限管理は悩みの種で、誤操作が怖いので普段はRead Onlyの権限にしておきたいのですが、手軽に権限を昇格する方法がありません。なので、別の管理者ユーザを作って、そちらでログインしなおしたり、それを半自動化するCyberArkやBeyondTrustといったPAM系ソリューション、あるいは最近流行りのCIEM(PAM機能を持つもの)を導入する必要がありました。 Azureでは結構以前からPIM(Privileged Identity Management)がネイティブで組込まれており非

    クラウドでもsuが出来る! GCPにPAM(特権管理)がついに登場
  • 【ソフトウェア設計】例外処理を考える

    はじめに 最近書いてるソフトウェア設計シリーズです。今回は例外に関して。以前、以下のような記事を書いたのですが、もう少し深堀して書いてみました。 ちなみにソフトウェア設計シリーズは他には以下を書いています。 モジュールになぜ分けるのか? モジュール、依存、そしてカプセル化 モジュールをどう分割するのか? 簡潔さは力なり? 予測可能な振る舞いと簡潔さについて ドキュメントとしてのコメント TL;DR 例外は「原則」キャッチしない 業務例外や必ずハンドリングさせたい例外はOptionalなど戻り値の方が便利 だいたい以下の図が言いたい事のすべて 例外処理とは? 「例外処理(Exception Handling)」は言語に依らず普遍的な関心事です。端的に言えば例外処理は異常やシステムの動作に不備が発生した際の特別な分岐処理です。リカバリやリソースの解放、あるいはユーザへの通知などがありますね。

    【ソフトウェア設計】例外処理を考える
  • 【ソフトウェア設計】モジュールをどう分割するのか?

    はじめに 前々回や、前回に引き続き、ソフトウェア設計の指針に関する話をしたいと思います。 関数やクラス、そしてサービスなどシステムの塊の単位をモジュールと呼び、モジュールを作る事で、認知負荷を下げ複雑性と戦うという話をしてきました。では、モジュールは「いつ」分割するのが良いでしょうか? また、他にも共通モジュールを不用意に作ってしまって苦労した人も多いのでは無いでしょうか? 今回はそのあたりの話をしていきます。 TL;DR 以下があればモジュール設計を見直す 単純な要件/普段の利用に対して、タイプ量や約束事が多い 共通モジュールが「使われ方」に依存する モジュールの役割を一言で説明できない コード管理や性能/データ整合性など利用に際してのペナルティが高い 分割 is NOT 正義 - FizzBuzz Enterprise Edition 複雑性を排除するためにモジュール分割をすることは重

    【ソフトウェア設計】モジュールをどう分割するのか?
  • 今年の書初めコーディングはAITuberを創る!

    はじめに あけましておめでとうございます。去年は何といってもAIの年でした。ChatGPTStableDiffusion2022年末に登場してから、想像を超えてAI周りが進化しましたね。今回は年の初めという事もあり、前から興味のあったAITuberを作ってみる事にしました。 「AITuberを作ってみたら生成AIプログラミングがよくわかった件」 っても買ったし。LLM部分だけでは無く、OBSやYouTubeのコメント取得などAITuberに必要な内容が一式揃っていて非常に参考になりました。 また、私はプログラミングは多少できますが、イラスト音楽に関しては全くスキルの無い人間です。そのためそのあたりに関してはStable DiffusionやSunoAIの力を借りて作っているので、結果的にオール生成AIという感じですね。そのあたりも含めて記事にまとめたいと思います。 TL;DR 素の

    今年の書初めコーディングはAITuberを創る!
  • パスワードはおしまい! 認証はパスキーでやろう

    はじめに パスワードは古来より認証に良く使われる方法ですが、その運用の難しさからセキュリティの懸念とその対策としての運用の複雑さ(複雑で長い文字列、90日でパスワード変更など)が要求される大きく問題をもった仕組みです。 その根的な解決策としてFIDO Allianceを中心に推進されている 「パスワードレス」 が注目されています。これはPINや生体認証とデバイス認証を使ったMFAからなっており、フィッシングやパスワード流出に強い上に、ユーザも複雑なパスワードを覚えなくて良い、という大きなメリットがあります。最近はこの流れでPassKeyというものが登場し、Apple/MS/Googleのプラットフォーマが対応したことで、格運用に乗せれるフェーズになってきました。というわけで以下に解説動画を作ったのですが、動画中で時間の都合で触れきれなかったところや、JavaScriptによる実装のサン

    パスワードはおしまい! 認証はパスキーでやろう
  • その例外、いつキャッチするの?

    はじめに 最近、若手のコードレビューをしていて例外の使い方を教える機会があったので、ブログの方にもまとめたいと思います。今回はバッチ編。オンラインだとまた少し違う観点があると思います。また、言語はJavaを前提していますが考え方は例外機構をもつ言語ならあまり変わりません。 TL;DR 例外は原則キャッチしない。バッチは速やかに殺せ 個別箇所でログを出さずに必要な業務情報はExceptionを入れ子にして乗せる 長いバッチのためにはスキップもやむなし 原則、例外はキャッチしない JavaにはErrorとExceptionが存在し、OutOfMemoryErrorとかプログラム上ではどうしようもないものがエラー、ファイルが存在しない(FileNotFoundException)とかプログラム側でハンドリングするもの、と教科書では習うと思います。なのでException系はキャッチするものと、と

    その例外、いつキャッチするの?
  • 運用出来るWebアプリケーションの作り方

    はじめに 先日、下記のようなツイートを見つけて、そういえば趣味個人開発してたときには然程気にしてなかったけど、仕事で運用するようになって先輩たちから学んだり自分で身につけたチップスってちょこちょこあるよねー、とふと思ったので、Webアプリケーション開発に関わるものをいくつかまとめてみました。 特に体系的/網羅的という程でもないですし、最近はFWや色々な仕組みでカバーされてるものも多いですが備忘録として。 Tips 機械が読めるログを作る これは割と重要なのですが、ログは人間が読むものではなく機械が読むものです。それはZabbixだったりDatadogだったりSplunkだったりgrep/awkだったりツールは何でも良いのですが、古の時代はさておき現代ではログは機械が読めることが最重要です。 まず大前提として構造化されている必要があります。言うまでもないですが「フリーフォーマット」のログの

    運用出来るWebアプリケーションの作り方
  • 【夏休みの自由研究】そうだブロックチェーンを作ろう!

    はじめに ITニュースの方でも話しましたが、ここ数日、例のWeb3がとても話題ですね。まあ、炎上なので良い事では無いのですが、せっかくなのでその根幹技術らしいブロックチェーン周りの自分の理解を整理してみることにしました。とりあえず、簡易なブロックチェーンを作ってNFTやスマートコントラクトについても少し考えていきたいと思います。 なお、ネタでは無く詳しくない分野なので勘違いとかあると指摘してもらえると嬉しいです。 注意 あくまで私の理解のアウトプットなので実際の挙動や仕様とは異なる可能性があります 実践的で格的な仕様や実装ではなく、あくまで基的な理解のためのサブセットの作成 データの自由化!とかそういう話はしません ブロックチェーンを作ろう! ハッシュ値による改ざんの困難性 そもそもブロックチェーンとは何でしょうか? 一般には改ざんに強いP2Pな台帳という理解かな、と思います。暗号

    【夏休みの自由研究】そうだブロックチェーンを作ろう!
  • Hello Worldのその先へ - 若手エンジニアにお勧めの本6選

    はじめに こちらの動画でも紹介したのですが、春は新人エンジニアの季節。そして去年や一昨年前の新人たちが2年目から3年目になる季節です。というわけで、そんな彼らが初級者から中級者になるためにオススメのを紹介したいと思います。 この記事では動画の内容に加えて「どんなを何故紹介するのか?」という観点も合わせて加筆しています。 ラインナップ 紹介するは以下のラインナップです。超有名を含めて 「アーキテクチャ」 「運用」 「コーディング」 「インフラ」 「データベース」 とWebアプリケーションエンジニア必須の6カテゴリから1つずつ選出してみました。 UNIXという考え方―その設計思想と哲学 ITIL はじめの一歩 スッキリわかるITILの基と業務改善のしくみ リーダブルコード ―― より良いコードを書くためのシンプルで実践的なテクニック レガシーコード改善ガイド Webエンジニアが知って

    Hello Worldのその先へ - 若手エンジニアにお勧めの本6選
  • Microsoft Defenderを眺めてると「もう全部あいつ一人でいいんじゃないかな」という気分になる

    はじめに 先日のIgniteでまたもやMicrosoftセキュリティ製品の名称が代わりました。今年に入って、2回!! ただ、今回の名称変更はAzureと言う名前をMicrosoftと変える事で 「Azureに限定した製品ではなくハイブリッドクラウド/マルチクラウド対応」 という点を強く押し出した意図も想像できます。最近のMSのセキュリティ製品は例えばEDRもMacLinux, Android/iOSに対応していますし、マルチクラウドをサポートしているものも多いので、自分の整理を兼ねてまとめてみました。全体的にここ最近名称変更が入ってるので旧名称も入れています。 Microsoft Defender + αの一覧 Windowsの固有の機能から、独立したエンドポイントセキュリティ製品、サーバサイドの製品までMicrosoft Defender の名前が使われてるので知らないとちょっとやや

    Microsoft Defenderを眺めてると「もう全部あいつ一人でいいんじゃないかな」という気分になる
  • プロコンにOSSを使ってはいけないのか? #procon32

    はじめに 先日開かれた高専プロコンにて「ふろこん」というプロダクトを発表されたところ 「私は怒っています」 「ライブラリを使って楽をしている」 などの指摘を審査員より受けたというツイートに関連して、 SNSで 「OSSを使うのがNGとか分かって無さ過ぎる」 とか 「審査員はフロントエンドが分かってない」 というコメントが多数有りました。逆に 「あの発表内容はミスリーディングであり適切ではない」 等のコメントも一部ありました。私自身はどちらかと言うと件の審査員の方に同意する部分もありますので、その考えに至る背景や私なりの発表の改善点をまとめてみました。あくまで、こういう考え方もあるよ、と参考までに。 重要 発表された方々を誹謗中傷する意図は一切ありません ふつうに面白い着眼点で良いもの作ったなー、と思っています 審査員の言い方には問題がありハラスメントは常にダメ、ゼッタイ。例えコメントの趣旨

    プロコンにOSSを使ってはいけないのか? #procon32
  • コロナ予約サイトチャレンジ。1万TPSを体験しよう

    はじめに いろんな話題が出ているコロナ予約サイトですが、横浜市の予約サイトが公開すぐに落ちたことでまず話題になりました。 ただ、最大34万人の予約者なので 1分あたり最大100万件のアクセスを想定していたが、開始直後に200万件のアクセスがあったということで33,000TPSというかなりのトラフィックが来た事が予想されます。 対応策がサーバを増やして目標値を当初設計の6倍に引き上げるとの事だったのですが、空席照会のついた予約システムってDBにある程度同期的に書き込む必要があるので、そんな簡単にスケールアウト出来ないはずです。 JSとかCSSとかも含めてるならさておき、メインのページなどのHTMLなどを含めたPVだと仮定してもDBに数千アクセスが行きますし参照だけではなく更新も入ります。どうやったのか当に謎なんですが、特に工夫のないアプリ実装でどのくらいスケールするのか少し気になったので試

    コロナ予約サイトチャレンジ。1万TPSを体験しよう
  • カード番号をSalt無しのSHA256でトークン化するのがどのくらい危険か試してみた

    はじめに 後輩から実データからトークンキーを生成するの「SHA256とかでハッシュ化でも良いですか?」と聞かれたので「少なくともSaltは必須だね」的な話をしたところ「Saltは(短い可能性があるから)パスワードとかには使うイメージだったけど元データがそれなりに長ければ要らないと思ってました」的な話題になりました。 十分な時間を掛ければ解けるのでもちろんダメなのですが、そういえば十分な時間ってどのくらいだろうと思いちょっと試してみました。 そこそこ長くて識別子に使われる可能性がある番号だとクレジットカード番号が16桁で良い感じなので試してみました。 クレジットカード番号は何通り? 16桁で0-9の値ですが数字なので先頭に0はおけませんから以下のような式になります。 その数なんと9000兆通り! 果たしてこれは計算しきれるのでしょうか? ちなみに実際にはクレジットカード番号には下記のように取

    カード番号をSalt無しのSHA256でトークン化するのがどのくらい危険か試してみた
  • GitHubは禁止するべき? ソースコード流出事件から考える情報資産の守り方

    TL;DR GitHubのアクセス自体を禁止してもセキュリティリスクは高いまま 仮にやるならGitHubのPushだけを禁止するようなツールを使わないと意味がない GitHubでコード管理したいならアカウント管理や情報分類などの運用を組み立てよう はじめに 先日、大手銀行などのソースコードがGitHubを経由して漏れる、というキーワードが話題になりました。 そもそもGitHubってなによ? って方はこちらの四コマが分かりやすいです。 これだけ聞くと相当問題のようにも聞こえますが、別にGitHubの脆弱性を突かれたたとかではなく派遣業者の社給PCないしはそこを経由した私物のPCからGitHubにPushされたという良くある情報流出ですね。なお、幸いにも重要なコードは含まれていなかったようです。 幸か不幸かこのエンジニアGitHubに不慣れだったので非公開ではなく公開設定にしていたため、SN

    GitHubは禁止するべき? ソースコード流出事件から考える情報資産の守り方
  • React Server Componentsに感じたフロントエンドの消失

    はじめに 新年早々に面白そうな記事を見つけました。ReactでのAPI呼出しを最適化するために「部分的にサーバサイドで実行するコンポーネントを作る」というもののようです。 あるいは去年の記事ですが気になってたものとしてBlitz.jsでReactベースのFWであるnext.jsに永続化層を持たせてRailsのようなFWにしようというアプローチもあります。 どちらの記事も書かれてる内容自体は分かる気がするものの 「それをフロントエンドでやる意味あるの?」 というのが拭えずイマイチ腑に落ちなかったんですが、単純に 「私と最前線でやられてる方々で期待してるものがたぶん違う」 という気がしてきたので、その辺を整理のために書いてみます。 注意書き Vue.js/Nuxt.jsは少し触ったことがありますが、React Server ComponentsやBlitz.jsを触ったことは無いです 「なんで

    React Server Componentsに感じたフロントエンドの消失
  • CentOS Streamへのシフトでうろたえないための手引き

    何が起こったの? CentOSプロジェクトがCentOS Streamに開発をシフトしていくことを宣言しました。これに伴ってRHEL 8の再構築としてのCentOS Linux 8は2021年に終了予定となりました。 ref: https://blog.centos.org/2020/12/future-is-centos-stream/ CentOSはLinuxの2大ディストリビューションの一つであるRed Hat Enterprise Linuxから商用パッケージを抜いてリビルドしたバージョンです。 商用パッケージが抜いてあるため、サポート無しで良ければ無料で番環境で利用できるという事でOSの商用サポートを必要としないようなケースでよく利用されています。 今回、CentOS Linuxが終了してCentOS Streamになる事でCentOS終了!? という感じで一瞬ビビりましたがそ

    CentOS Streamへのシフトでうろたえないための手引き
  • なぜ脱OSSが増えているのか?

    はじめに TerraformやVaultを開発するHashiCorpは自社製品をOSSのMPL(Mozilla Public License v2.0) から、ソースコードは公開するも一部の利用に制限があるBSL(Business Source License) への変更をアナウンスしました。 これは2018年のRedisを皮切りにMongoDBCockroachDB、ElasticSearchなど多くのプロダクトで進められている脱OSSの流れです。商用のオープンソース[1]と言われてしまうこともある最近のこの動きの理由は何故なのか? という点を以下の動画で解説しました。 動画中では尺の都合で端折った個所も多いので、こちらの記事の方にもまとめておきたいと思います。 OSSとは? OSSの定義 まず、OSS(オープンソース)とはなんでしょうか? これはRMSのフリーソフトウェアを源流とする

    なぜ脱OSSが増えているのか?
  • Linuxコンテナの「次」としてのWebAssembly、の解説

    はじめに WASMをブラウザの外で動かすトレンドに関して「Linuxコンテナの「次」としてのWebAssemblyの解説」というタイトルで動画を投稿したのですが、動画では話しきれなかった内容をこちらの記事で補完したいと思います。 2022年もWebAssembly(WASM)の話題が多く発表されましたが、そのひとつにDocker for DesktopWASM対応があります。FastlyやCloudflareもエッジ環境でWASMを動かすソリューションを持っていますし、MSのAKS(Azure Kubernetes Service)でもWASMにpreview対応しています。WASM Buildersでも2023年のWASMの予想としてWASMのアプリケーションランタイム利用に関して言及されました。 WASMといえば元々ブラウザ上で高速にC++のコードなどを実行するところから始まっている

    Linuxコンテナの「次」としてのWebAssembly、の解説
  • Dockerって何? って聞かれたときの解説、の解説

    TL;DR Dockerは仮想化であるコンテナの実装の一種 ただし、広義のDockerはOCI系コンテナの総称 アプリの配布と実行の仕組みと思えばOK コンテナによりIaCや一貫したデプロイ、H/Wの効率的な利用がしやすくなる ※ コメントでいくつか指摘があったので記事を更新しました。ご指摘ありがとうございました! はじめに おそらく過去幾度となく生み出されたであろうDocker解説記事となります。正確には解説動画の解説記事。 というのも、Dockerあるいはコンテナはもはや当たり前、と言えるほど普及してるようにもSNSやブログとかだけ見てると思えますが、実際には話題は知ってるけど良く分かってない/業務で今度使う事を検討したいけどつまり何なの? って人もまだまだ多いです。 なので私が 「Dockerって何?」 と聞かれたとき答えてる内容を動画にしてみました。技術的な詳細を解説というよりは

    Dockerって何? って聞かれたときの解説、の解説