サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「かわいい」
zenn.dev/koduki
はじめに 以前からユニットテスト/単体テストという言葉は使いづらい、と感じており今回も旧Twitterで「テストを実行時間ベースで分類する良い言葉ないかなー」と呟いていたところ、「テストサイズのSMLって考え方があるよ」と教えて戴きました。 だいたいは教えてもらったt_wadaさんの記事にすべて書いてあるのですが、自分の整理も含めて動画にしたので、その補完記事となります。 TL;DR 単体テストのバベルの塔は既に崩壊 CI/CDでの継続的テストには時間ベースのテスト分類が重要 UT/IT/E2EではなくSMLによるテストサイズがCI/CDには合う それは単体テストか結合テストなのか? 自動テスト、手動テストに関わらずテストの分類として単体テストと結合テストという言葉は一般的です。 ITQBではTest Levelsという言葉で定義されていますし、以下のようなV字モデルの対応表はみんな知って
はじめに Linuxの良い所の一つにsuやsudoと言った特権管理の仕組みがあります。普段は通常アカウントで入って、例えばインストールなどの特権作業が必要な時だけsu/sudoで一時的な権限昇格が可能ですし、/etc/pam.dで誰がどのユーザにスイッチ出来るかなどは細かく制御できます。 一方で、クラウドの権限管理は悩みの種で、誤操作が怖いので普段はRead Onlyの権限にしておきたいのですが、手軽に権限を昇格する方法がありません。なので、別の管理者ユーザを作って、そちらでログインしなおしたり、それを半自動化するCyberArkやBeyondTrustといったPAM系ソリューション、あるいは最近流行りのCIEM(PAM機能を持つもの)を導入する必要がありました。 Azureでは結構以前からPIM(Privileged Identity Management)がネイティブで組込まれており非
はじめに 最近書いてるソフトウェア設計シリーズです。今回は例外に関して。以前、以下のような記事を書いたのですが、もう少し深堀して書いてみました。 ちなみにソフトウェア設計シリーズは他には以下を書いています。 モジュールになぜ分けるのか? モジュール、依存、そしてカプセル化 モジュールをどう分割するのか? 簡潔さは力なり? 予測可能な振る舞いと簡潔さについて ドキュメントとしてのコメント TL;DR 例外は「原則」キャッチしない 業務例外や必ずハンドリングさせたい例外はOptionalなど戻り値の方が便利 だいたい以下の図が言いたい事のすべて 例外処理とは? 「例外処理(Exception Handling)」は言語に依らず普遍的な関心事です。端的に言えば例外処理は異常やシステムの動作に不備が発生した際の特別な分岐処理です。リカバリやリソースの解放、あるいはユーザへの通知などがありますね。
はじめに 前々回や、前回に引き続き、ソフトウェア設計の指針に関する話をしたいと思います。 関数やクラス、そしてサービスなどシステムの塊の単位をモジュールと呼び、モジュールを作る事で、認知負荷を下げ複雑性と戦うという話をしてきました。では、モジュールは「いつ」分割するのが良いでしょうか? また、他にも共通モジュールを不用意に作ってしまって苦労した人も多いのでは無いでしょうか? 今回はそのあたりの話をしていきます。 TL;DR 以下があればモジュール設計を見直す 単純な要件/普段の利用に対して、タイプ量や約束事が多い 共通モジュールが「使われ方」に依存する モジュールの役割を一言で説明できない コード管理や性能/データ整合性など利用に際してのペナルティが高い 分割 is NOT 正義 - FizzBuzz Enterprise Edition 複雑性を排除するためにモジュール分割をすることは重
はじめに 最近、APoSD(A Philosophy of Software Design)を読んで、ソフトウェア設計に関して色々思う事が出来たというか、整理してみたくなったので、記事にまとめてみました。なお、APoSDの言葉を多用はしていますが解説記事という分けでは無く、自分の考え方の言語化にしっくり来たので使わせてもらってるという感じです。 TL;DR モジュールとは関数/クラス/サービスなどの何等かの機能のまとまり 良いモジュールは複雑性を隠蔽する 複雑性を隠蔽しないモジュールの価値は低い モジュールとは? プログラムは正しく動くことがまず何より大事ですが、その次というかほぼ同じくらい大事な事が読みやすく拡張しやすいことですよね? コードは圧倒的に読みものなので、どう読みやすく、つまり理解しやすい状態にしておくかは重要な事です。APoSDでは複雑性が低いコード、という言い方をしていま
はじめに ChatGPTの肝になる機能の一つが Function Calling です。これはLLMで質問の内容を解析して、必要な関数を呼び出すというものです。 「必要な関数」 をどのように判定しているかといえば、それは関数の説明文から判断します。今までもキーワードに応じて何かの処理をするようなプログラムは良くあったと思いますが、LLMの強力な言語処理能力を使うことで 「呼び出すべき関数」 と 「適切な引数」 を自動的に判定してくれます。SiriやAlexaみたいなツールが簡単に作れちゃいます。 今回はそのFunction callingをLangChain経由で使って天気予報APIをAITuberの「紅月れん」から呼べるようにしたので、その試行錯誤等を載せておきたいと思います。 なお、AITuber自体の作り方やLLMに関する全般的な話は下記の記事で取り扱っていますので、良ければ読んでみ
はじめに パスワードは古来より認証に良く使われる方法ですが、その運用の難しさからセキュリティの懸念とその対策としての運用の複雑さ(複雑で長い文字列、90日でパスワード変更など)が要求される大きく問題をもった仕組みです。 その根本的な解決策としてFIDO Allianceを中心に推進されている 「パスワードレス」 が注目されています。これはPINや生体認証とデバイス認証を使ったMFAからなっており、フィッシングやパスワード流出に強い上に、ユーザも複雑なパスワードを覚えなくて良い、という大きなメリットがあります。最近はこの流れでPassKeyというものが登場し、Apple/MS/Googleのプラットフォーマが対応したことで、本格運用に乗せれるフェーズになってきました。というわけで以下に解説動画を作ったのですが、動画中で時間の都合で触れきれなかったところや、JavaScriptによる実装のサン
はじめに あけましておめでとうございます。去年は何といってもAIの年でした。ChatGPTやStableDiffusionが2022年末に登場してから、想像を超えてAI周りが進化しましたね。今回は年の初めという事もあり、前から興味のあったAITuberを作ってみる事にしました。 「AITuberを作ってみたら生成AIプログラミングがよくわかった件」 って本も買ったし。LLM部分だけでは無く、OBSやYouTubeのコメント取得などAITuberに必要な内容が一式揃っていて非常に参考になりました。 また、私はプログラミングは多少できますが、イラストや音楽に関しては全くスキルの無い人間です。そのためそのあたりに関してはStable DiffusionやSunoAIの力を借りて作っているので、結果的にオール生成AIという感じですね。そのあたりも含めて記事にまとめたいと思います。 TL;DR 素の
はじめに 最近、若手のコードレビューをしていて例外の使い方を教える機会があったので、ブログの方にもまとめたいと思います。今回はバッチ編。オンラインだとまた少し違う観点があると思います。また、言語はJavaを前提していますが考え方は例外機構をもつ言語ならあまり変わりません。 TL;DR 例外は原則キャッチしない。バッチは速やかに殺せ 個別箇所でログを出さずに必要な業務情報はExceptionを入れ子にして乗せる 長いバッチのためにはスキップもやむなし 原則、例外はキャッチしない JavaにはErrorとExceptionが存在し、OutOfMemoryErrorとかプログラム上ではどうしようもないものがエラー、ファイルが存在しない(FileNotFoundException)とかプログラム側でハンドリングするもの、と教科書では習うと思います。なのでException系はキャッチするものと、と
はじめに TerraformやVaultを開発するHashiCorpは自社製品をOSSのMPL(Mozilla Public License v2.0) から、ソースコードは公開するも一部の利用に制限があるBSL(Business Source License) への変更をアナウンスしました。 これは2018年のRedisを皮切りにMongoDBやCockroachDB、ElasticSearchなど多くのプロダクトで進められている脱OSSの流れです。商用のオープンソース[1]と言われてしまうこともある最近のこの動きの理由は何故なのか? という点を以下の動画で解説しました。 動画中では尺の都合で端折った個所も多いので、こちらの記事の方にもまとめておきたいと思います。 OSSとは? OSSの定義 まず、OSS(オープンソース)とはなんでしょうか? これはRMSのフリーソフトウェアを源流とする
はじめに 先日、下記のようなツイートを見つけて、そういえば趣味で個人開発してたときには然程気にしてなかったけど、仕事で運用するようになって先輩たちから学んだり自分で身につけたチップスってちょこちょこあるよねー、とふと思ったので、Webアプリケーション開発に関わるものをいくつかまとめてみました。 特に体系的/網羅的という程でもないですし、最近はFWや色々な仕組みでカバーされてるものも多いですが備忘録として。 Tips 機械が読めるログを作る これは割と重要なのですが、ログは人間が読むものではなく機械が読むものです。それはZabbixだったりDatadogだったりSplunkだったりgrep/awkだったりツールは何でも良いのですが、古の時代はさておき現代ではログは機械が読めることが最重要です。 まず大前提として構造化されている必要があります。言うまでもないですが「フリーフォーマット」のログの
本記事はGCP(Google Cloud Platform) Advent Calendar 2022 2日目の記事です。 3日目: k8s × IAP @po3rin さん です。 TL;DR Edge Security PolicieでバックエンドバケットにもIP制限が可能に ただしGCSが公開状態だとそちらのURLにアクセスは出来てしまう 署名付きURLでプライベートなGCSでCLBからのアクセスが可能だが課題は残る はじめに クラウドを使っていても、社内向けシステムやテスト環境はインターネット上に公開したくないので、IP制限を掛けたいケースは良くありますよね? GCPの場合、いくつか方法はありますがWebシステムの場合はCloud Load Balancing (CLB)とCloud Armorを組合わせてやるのが一般的だと思います。GCEに置いたシステムだろうとGKEだろうとCl
はじめに WASMをブラウザの外で動かすトレンドに関して「Linuxコンテナの「次」としてのWebAssemblyの解説」というタイトルで動画を投稿したのですが、動画では話しきれなかった内容をこちらの記事で補完したいと思います。 2022年もWebAssembly(WASM)の話題が多く発表されましたが、そのひとつにDocker for DesktopのWASM対応があります。FastlyやCloudflareもエッジ環境でWASMを動かすソリューションを持っていますし、MSのAKS(Azure Kubernetes Service)でもWASMにpreview対応しています。WASM Buildersでも2023年のWASMの予想としてWASMのアプリケーションランタイム利用に関して言及されました。 WASMといえば元々ブラウザ上で高速にC++のコードなどを実行するところから始まっている
はじめに Ruby 3.2よりWASIベースのWebAssemblyサポートされました。 これによってRubyをブラウザ上で実行できるようになるわけですが、実はWASMはブラウザの外での動作も可能になっており、OSに依存しないライブラリを作ったり、Edge Computingで実行させたり、シングルバイナリの実行可能ファイルにしたりと色々な事が出来るようになります。 今回はRubyのWASM対応でどんなことが出来るようになったかをまとめたいと思います。 WebAssemblyとは? WASMに関して少しおさらいをしておきましょう。 WebAssemblyは仮想命令セットアーキテクチャです。WASMとも言います。RustやCをはじめとした多くの言語からコンパイルする事が出来、Webブラウザの中で高速にそしてセキュアに処理を実行するための仕組みとして登場しました。 元々ブラウザ向けに登場した仕
はじめに 私はGCPのCloud Runがお気に入りのサーバレス環境なのですが、一番得意な言語であるJavaを使った場合のスピンアップタイムの悪さには頭を悩ませています。 ローカルでは1,2秒で起動する場合でも、何故かCloud Runに持って行くと他の言語と比べても劇的に遅くなるのですよね... GraalVMのネイティブイメージを使えばGoなどと遜色無く瞬時に起動するのですが、ネイティブイメージへの変換は癖も強いため通常のJVMでも改善できないかとチューニングを試してみました。 TL;DR 最終的に60%程起動速度を改善 9秒台が3秒台になっているので体感としては結構変わる native-imageが使え無いケースでもこのくらいなら許容出来そう もちろん完全停止状態以外のレスポンスは3秒とか言わずミリ秒オーダー 準備と基礎値の計測 まずはアプリケーションを準備する必要があります。今回は
はじめに 先日、JakartaOne Live Japan 2022というイベントで登壇させていただく機会を頂きました。 QuarkusやHelidonのような新しめのEEフレームワークがこれまでのPayaraやWebLogicとどう違うのか? CloudRunのようなサーバレス環境でMicroProfileのどの機能が効果的に働くのか? という点を最近のWeb開発周りのトレンドと絡めながら話ました。上記のようにアーカイブ動画も公開されていますが、せっかくなのでQuarkusがサーバレス環境で実行に最適化されるまでの周辺事情等をまとめたいと思います。Javaだけに留まらず最近の環境事情の整理にも役立つかと思います。 TL;DR Quarkus/Helidonは軽量で高速な新しいEEフレームワーク コンテナや、サーバレス、クラウドネイティブなど最新のトレンドに基づいた設計 GCPのCloud
はじめに 普段、個人でWebアプリを書くときにはこだわりが無いのでBootstrapを使っていました。ただ他にもっとシンプルなの無いかなぁ、と探してたらWater.cssというclasslessなCSSフレームワークを見つけました。 HTMLタグに直接装飾がマッピングされているので、それっぽいデザインが簡単に出来ます。ダークモードが中々良いですね。 ただBootstrapのようにグリッド機能が無さそうなので、レイアウトがちょっとめんどそうだな。。。と思いつつも今回は簡単なUIだから久しぶりにfloatとか手書きすることに。そして記憶の彼方にいったやり方を調べてたらCSS Grid Layoutという機能が標準搭載されてる事を今更知りました。中々便利そう&私のようにBootstrap + JQuery時代で止まってる人も居るかもしれないので、簡単に紹介しておこうと思います。 TL;DR CS
はじめに ITニュースの方でも話しましたが、ここ数日、例の本でWeb3がとても話題ですね。まあ、炎上なので良い事では無いのですが、せっかくなのでその根幹技術らしいブロックチェーン周りの自分の理解を整理してみることにしました。とりあえず、簡易なブロックチェーンを作ってNFTやスマートコントラクトについても少し考えていきたいと思います。 なお、ネタでは無く詳しくない分野なので勘違いとかあると指摘してもらえると嬉しいです。 注意 あくまで私の理解のアウトプットなので実際の挙動や仕様とは異なる可能性があります 実践的で本格的な仕様や実装ではなく、あくまで基本的な理解のためのサブセットの作成 データの自由化!とかそういう話はしません ブロックチェーンを作ろう! ハッシュ値による改ざんの困難性 そもそもブロックチェーンとは何でしょうか? 一般には改ざんに強いP2Pな台帳という理解かな、と思います。暗号
はじめに 初期化処理が重いインスタンスってありますよね。代表的な例だとJDBCコネクションとか。Factoryパターンで初期化を隠蔽するような奴は概ね重いのはどの言語でも一緒だと思います。 こういった重い処理を例えばループなどで大量に初期化してしまうのはかなりのコストになってしまい、特にバッチのようなチリツモな処理では無視できないほど実行時間に影響を与えてしまう恐れがあります。 そういった場合はSingletonなどを使ってインスタンスの生成コストを隠蔽しますが、マルチスレッド環境下だと影響が出る場合もあります。以前、そういうケースでバグってるのに出くわした事があるので、記憶の整理がてらまとめておこうと思います。 コード例はJavaですが、あまりJavaかどうかには依存しない考え方になっていると思うので、他の言語が得意な人は疑似コード程度に思っておいてください。 なお、JDBCを始めとした
はじめに こちらの動画でも紹介したのですが、春は新人エンジニアの季節。そして去年や一昨年前の新人たちが2年目から3年目になる季節です。というわけで、そんな彼らが初級者から中級者になるためにオススメの本を紹介したいと思います。 この記事では動画の内容に加えて「どんな本を何故紹介するのか?」という観点も合わせて加筆しています。 ラインナップ 紹介する本は以下のラインナップです。超有名本を含めて 「アーキテクチャ」 「運用」 「コーディング」 「インフラ」 「データベース」 とWebアプリケーションエンジニア必須の6カテゴリから1つずつ選出してみました。 UNIXという考え方―その設計思想と哲学 ITIL はじめの一歩 スッキリわかるITILの基本と業務改善のしくみ リーダブルコード ―― より良いコードを書くためのシンプルで実践的なテクニック レガシーコード改善ガイド Webエンジニアが知って
はじめに Nuxt.js + TypeScriptを今試し中なのだけど、TypeScriptでのイベントの取り扱いが面倒なので、とりあえずStructural Subtypingを適用してみました。 今のところ問題なさそうなんだけど、軽く探して見た限りだとあまり類似のアプローチ無いし悪手なのかな? てか、FWとか一般的なライブラリで対応してるけど見つけれてないだけの気がしてならない。。。 TL;DR Event型を取り扱うときはtargetの型が不明なのでコンパイルエラーになる事がある event: { target: HTMLButtonElement }型を指定するのが一番手っ取り早い 求む、もっと手軽な対応方法 TypeScriptでのEvent型の取り扱いの罠 クリックイベントが発生したHTMLのノードに対して作業したい事は良くあるかと思います。 例えば下記のように 「クリックした
はじめに 富士通がついに2030年にメインフレーム市場から撤退し、66年の歴史に幕を閉じるという話が出てきました。 富士通といえば国産大型コンピュータの先駆けであり、IBM互換機を作って巨人IBMに食らいついたベンダーでもあります。そんなわけで中々に歴史の転換点を感じる話題ではあるのですが 「ところでメインフレームって何? 」 という方も多いでしょう。という分けで名前は聞いたことがるけど実態が良く知らない「メインフレーム」 に関して少しだけ解説をする動画を作りました。 この記事は動画では話しきれなかった事も含めて、もう少し深堀した解説をしていきたいと思います。ちょっと長くなりましたが、前半が歴史の話で後半がアーキテクチャの話になるので好きな所にジャンプして読んでみてください。 メインフレーム? 汎用機? ホスト? メインフレームは他にも汎用機とかホスト機と呼ばれることもありますよね。Wik
こちらはJava Advent Calendar 2021の11日目です。 はじめに 「Apache Log4j」ライブラリに致命的なリモートコード実行の脆弱性が発見され現在絶賛対応中の方もいらっしゃるかと思います。 ここで重要になってくるのが影響調査には自分たちの改修しているコード本体だけではなく、OSSの依存ライブラリも含まれることです。log4j2は超広範囲に利用されていますから、逆にJavaのコードは潜在的に対象、くら言ってしまっても良いですが、もう少しマイナーなライブラリだとそもそも対象となるコードを探すのが大変です。pom.xmlをgrepしただけでは見つけれないですから。 この手の依存性チェックをするツールはありそうだと思ってたけど、特に今まで使った事はなかったので今回はMavenプラグインのOWASP Dependency-Checkを試してみました。 今回サンプルに利用舌
この記事はterraform Advent Calendar 2021の8日目です TL;DR 「エンタープライズ企業のベスト プラクティス」等にマッチしたTerraform環境の作成 CloudBuildとGitHubを使いGitOps/継続的デプロイ(CI/CD)を実現 Stateを分けるためにプロジェクトは環境単位に グループや権限のアサインなどプロジェクト管理作業がTerraformにより大幅に効率化 はじめに GCPでIaCと言うと、GCPネイティブのCloud Deployment Managerがあります。ただ、少し触った限りでは情報量が少ないのとYAML, Python, Jinjaが混在していて記述の揺れが多そうな印象を個人的に受けました。と言う分けで、こういう時はマスに乗るべきとTerraformを利用することにしたのですが、AWS等に比べると情報がやはり少ないです。そ
はじめに 先日のIgniteでまたもやMicrosoftのセキュリティ製品の名称が代わりました。今年に入って、2回!! ただ、今回の名称変更はAzureと言う名前をMicrosoftと変える事で 「Azureに限定した製品ではなくハイブリッドクラウド/マルチクラウド対応」 という点を強く押し出した意図も想像できます。最近のMSのセキュリティ製品は例えばEDRもMacやLinux, Android/iOSに対応していますし、マルチクラウドをサポートしているものも多いので、自分の整理を兼ねてまとめてみました。全体的にここ最近名称変更が入ってるので旧名称も入れています。 Microsoft Defender + αの一覧 Windowsの固有の機能から、独立したエンドポイントセキュリティ製品、サーバサイドの製品までMicrosoft Defender の名前が使われてるので知らないとちょっとやや
はじめに 先日開かれた高専プロコンにて「ふろこん」というプロダクトを発表されたところ 「私は怒っています」 「ライブラリを使って楽をしている」 などの指摘を審査員より受けたというツイートに関連して、 SNSで 「OSSを使うのがNGとか分かって無さ過ぎる」 とか 「審査員はフロントエンドが分かってない」 というコメントが多数有りました。逆に 「あの発表内容はミスリーディングであり適切ではない」 等のコメントも一部ありました。私自身はどちらかと言うと件の審査員の方に同意する部分もありますので、その考えに至る背景や私なりの発表の改善点をまとめてみました。あくまで、こういう考え方もあるよ、と参考までに。 重要 発表された方々を誹謗中傷する意図は一切ありません ふつうに面白い着眼点で良いもの作ったなー、と思っています 審査員の言い方には問題がありハラスメントは常にダメ、ゼッタイ。例えコメントの趣旨
はじめに 下記の記事を見つけたのですが内容は大筋は賛成なのだけど、消費税をマジックナンバーという言葉で色々と違和感が。 これってマジックナンバーの話関係ある? と思ったのでちょっと自分の考えを整理してみました。 TL;DR (狭義の)マジックナンバーは使うな。常に名前を付けよう たとえ自明でもコード上で重複があるなら定数/変数や関数にしよう 共通ロジックを作ろう! でも気を付けながら。 マジックナンバーとは? 私の理解ではマジックナンバーというのは意味の分からない数値です。例では消費税率という少なくともコンテキストが分かれば意味の分かりそうなものが使わていますがコード値とかフラグ値のようなそもそも意味のない値に使うことの方が多い印象です。これが本当のマジックナンバーです。 例えば以下のような条件分岐を考えます。タクシー料金を見積もるコードです。金額は適当なのであしからず。 def taxi
はじめに 新方針でDocker Desktopが大企業での利用の場合は商用ライセンスの使用が必要になるようです。新料金体系は8/31から実施ですが、2022年1月31日まで猶予期間があります。 個人やスモールビジネス、あるいは教育やOSSプロダクトなどは継続して無料版のPersonalを利用できるようですが、従業員数250人以上/年間売り上げ10億円以上の会社が対象になるようです。今見てる限りだと部署とかチームみたいな契約の単位では無く会社規模なので、大きな組織に所属してるともれなく対象になりそうですね。 $5/userからなので基本的には運用性も含めて払う方が楽だと思いますが、金額の大小にかかわらず予算を取るのが大変な組織や会社自体はデカくても部署がインキュベーションなので予算が基本無い、とか色んなパターンもあるかと思います。 ちょうど、手元のPCでここ最近 Docker Desktop
はじめに Cloud Run便利ですよね。コンテナをデプロイするだけで勝手にスケールしてくれますし使わない時はゼロインスタンスに出来ますし。こうした取り回しの便利さに加えて「良いな」と個人的に機能の一つがアカウントレベルのアクセスコントロールです。 Authenticationを「未認証を許可」にすれば公開APIとして誰でも使える状態になりますし、ACLの設定をすればサービスアカウントやユーザアカウント単位で実行できるユーザやアプリを限定出来ます。こういったセキュリティをアプリ側で作りこまなくて良いのは楽ですよね。 今回ちょっとIdentity Tokenをどう取り出すのか? でハマってので「どのように認証をするのか」「IDトークンをどのように取得するのか」をメモがてら書いていきたいと思います。 なお、前半は結果として不要だった調査の話なので結論だけ知りたい人は後半へGo。 TL;DR A
次のページ
このページを最初にブックマークしてみませんか?
『kodukiさんの記事一覧』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く