プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

VSCodeでJavaScript/Node.jsのコードをデバッグする

ここまでMacにNode.jsをインストールして、VSCodeでコード補完ができるようにしました。 次はデバッグします。 Node.jsアプリケーションを作成 デバッグ対象となる適当なアプリケーションを作成します。 VSCodeを立ち上げてserve.jsという名前でファイルを作…

VSCodeでJavaScript/Node.jsのコードを補完する

VSCodeでJavaScriptを書く時、ちゃんと候補表示&補完してくれるようにした話です。 やり方については情報が錯綜しています。私が調べた感じだと「tsdを使う」→「tsdが非推奨になりtypingsが推奨」→「typingsより便利なnpm install @types/が使えるようにな…

MacにNode.jsをインストールする

Node.jsはスケーラブルなアプリケーションを構築するための非同期型処理を前提とした環境です。ブラウザを必要とせず、PCのTerminalやIDE上でJavaScriptを実行することができます。 JavaScriptをブラウザで実行できるのは手軽な反面、細かい挙動を見ようとす…

JavaScriptのレガシーコードを読み解く

JavaScriptのド素人が「JavaScript本格入門」を読んだ後、ES5のレガシーコードを読んだ話です。 JavaScript入門書読破 「JavaScript本格入門」を読みました。簡潔でわかりやすいだけでなく構成もすばらしいです。こういう本を書ける人ってすごいと思います。…

nginxコンテナを自己署名認証局でHTTPS化する

前回の記事では自己署名証明書を使ってリバースプロキシとして動作するnginxコンテナをHTTPS化しました。 architecting.hateblo.jp しかしブラウザがエラーや警告を色々出すのでHTTPS化した実感がありませんでした。 今回は自己署名認証局が署名した証明書を…

nginxコンテナを自己署名証明書でHTTPS化する

前回、Dockerでnginxを入れて基本的なことを試して以下の記事を書きました。 architecting.hateblo.jp このときHTTPS化も試していたのですが話が長くなるので別の記事にすることにしました。 はじめに 今やサービスの入り口は全てHTTPS化するのが常識となり…

<環境構築不要>お手軽にKubernetesを試す

Kubernetesの公式Tutorial環境で自作コンテナのデプロイを試した話です。 動機と結果まとめ 勉強のために自作の超簡単サービスをDockerやAWSに簡易的にデプロイしてみました。 k8sでも試したいと思ったのですが環境を用意するほどの気力と余裕がありません。…

docker-composeを使ってみる

dockerしか使ったことない人間がdocker-composeを使います。 動機 Flaskアプリケーション作成のTutorialをやったらコンテナ化したくなりました。 コンテナ化したら今度はnginxコンテナやMySQLコンテナと連携させたくなりました。 連携させたら複数のコンテナ…

DockerでMySQLを試してみる

先日、nginxのDockerを試しました。その勢いでデータベースのDockerも試してみます。 まずは一番有名なMySQLからです。MySQLは大昔に触ったことがありますが、Dockerでセットアップするのは始めてです。Docker固有のポイントがあると思うので勉強していきた…

dockerでnginxを試してみる

nginxをよく見かけます。 1度くらい触ってみようと思って数年。ようやく重い腰を上げたいと思います。 とりあえず試して削除したいときに便利なのがdockerです。 dockerを利用してローカルPCで基本機能を試してみました。 コンテナ実行 docker run -it --na…

DockerhubへのイメージのPush

Dockerhubにアカウントを作成すると自分でBuidしたDockerイメージをリポジトリにpushすることができます。リポジトリのイメージはdocker pullで取得することができます。 Dockerhubは利用するけどアカウントは持っていない、という人は少なくないと思います…

TDDで役立つIntelliJ IDEA機能

cleancodersの動画を見ていて気がついた、TDDに便利なIntelliJ IDEAの機能を5つご紹介します。 1. Live Template TDDでは沢山のテストメソッドを書きます。毎回、「public void test ...」なんてタイプするのは面倒です。 そんなときに便利なのがLive Templ…

cleancodersのStack Kataを見て感じたことのまとめ

前回、cleancodersのStack Kataのビデオに個人的な解説を付けました。 architecting.hateblo.jp しかし35分のビデオに詳細な解説を付けたので長文になってしまい要点が読み取れません。 そこでこの記事では要点のみをまとめます。 私の個人的な理解なので合…

cleancodersのStack Kataに解説を付けた

cleancoders.comというサイトのプログラミング動画を見て勉強しています。 その中で「Stack Kata」という、StackクラスをTDDで作成するビデオがあります。このビデオは無料で公開されています。 https://cleancoders.com/episode/clean-code-episode-4-sc-1-…

mixinとは

Pythonなどのコードを見ているとよく見かける「mixin」。 今までは雰囲気でさらりと流してましたが今回、調べてみました。 mixinとは 主に多重継承が可能な言語で使われる継承の使い方です。 継承とは本来、親クラスとその子クラスの間に特別な階層関係を発…

pipの呼び出し部分の設計を調べてみた

main関数からどのように機能を呼び出すべきなのか考えています。 参考になりそうな、有名で、かつそんなに難しくなさそうなツールはないかな?と考えていたら思いついたのがpipです。 おそらくPythonで最も有名で、そこそこ高機能だけど、そんなに複雑でなさ…

cleancodersのJava Case Studyの(私的)UML図を作った

cleancoders.comというサイトのプログラミング動画を見て勉強しています。 英語で、日本語字幕はなく、高価ですがシニアクラスのプログラマーから直接、教えを受ける機会がない自分には貴重な教材です。 Java Case StudyというシリーズではWebサービスをスク…

f-stringの使い型

f-stringはPython 3.6から導入された文字列のフォーマットを制御する方法の1つです。 +で文字列リテラルと文字列変数を結合したり、str.format()を使うよりもコードがすっきりします。 基本 文字列をf''で囲う 変数と置き換えたいときは{変数名}とする name …

PythonでReflection

Pythonでクラス名やメソッド名から動的にインスタンスやメソッドを取得する方法を紹介します。 インスタンスの取得 importlib.import_moduleを使ってmoduleをimportして、getattrでmoduleからクラスを取得するのが一般的なようです。 from importlib import …

__main__.pyってなに

時折、見かける「__main__.py」 ってなにか調べてみました。 python -mで実行したときに呼ばれる 「python -m パッケージ名」を実行するとそのパーケージの__main__.pyが呼ばれます。 パッケージの作り方によっては__main__.py以外のモジュールを呼び出すこ…

Pythonで引数を扱う

引数を扱うときに便利なのがParserです。簡単に引数を処理することができ、定義も簡単です。一度使えばsys.argvを直接処理する気なんてなくなるはずです。 PythonではいくつかParserの選択肢がありますがargparse一択だと思います。 標準ライブラリの選択肢 …

PyCharmでテストコードのフォルダを多階層にしたらテストが動かなくなった

PyCharm + unittestでTDDっぽいことを試しました。最後にテストコードのフォルダ階層をプロジェクトコードのフォルダ階層と一致させたらそれまで動いていた単体試験の大半が動かなくなってしまいました。 ただのsys.pathの理解不足だったのですが同じことで…

Pythonの配布パッケージに.py以外のファイルを含めたいとき

PythonのコードでYAMLやJSONのファイルを参照していて、そのファイルをパッケージに含めたいときにどうすればよいか解説します。 そのようなファイルは「リソース」と呼ばれます。 コードの書き方 リソースをopenで読み込むと単体試験ではうまくいきますが、…

PyCharmでプロジェクトフォルダをRenameしたらちょっと面倒なことになった

PyCharmでプロジェクトの名前を変更したらunittestが動かなくなったりpyenvの仮想環境や__pycache__に古い名前が残ったりして少し苦労した話です。 プロジェクト名変更 コードが完成しunittestの単体テストも全て動いた後に最初に適当に命名したプロジェクト…

Git MergeでConflictが発生したときの対処

Git

異なるブランチで同じファイルの同じ場所を同時に編集するとConflictが発生する。 Conflictが発生した状態でMergeしようとすると失敗する。 $ git merge feature -m "merge feature branch into master" Auto-merging hello.py CONFLICT (content): Merge co…

機能要件と非機能要件の判別

要件は機能要件と非機能要件に分類される。 ある要件が機能要件なのか非機能要件なのかどのように判別すればよいだろう? ある要件を見たときそれが機能要件と非機能要件か判断できないことが初学者にはよくある。 現実の話をすると現場でそんなことで悩むこ…

非機能要件を定義するためのツール

非機能要件が多すぎるシステムは得られる効果以上に開発に時間がかかり高コストになる。 非機能要件が少なすぎるシステムは品質や運用性が低下し、技術的負債を抱えた状態でリリースされることになる。技術的負債は積み重なることはあっても精算されることは…

SOAとMicroserviceアーキテクチャ

SOAとMicroserviceの違いについて調べると様々な答えが出てくる。 「ESBとSOAPとWSDLを使うのがSOAだ」 「サービスの粒度が大きいがSOAで小さいのがMicroserviceだ」 「MicroserviceはSOAだ」 これは話し手の視点が異なることが原因だ。人によって「SOA」の…

API Gateway

API Gawewayという言葉をよく目にするようになった。 アーキテクチャ議論でよく出てくるのでなにを指しているのか理解しておきたい。 API Gatewayなしの場合 クライアントは「発注」という処理のために複数のサービスをREST APIで呼び出す 各サービスはTLS、…

APIキーを管理するCloudサービス

API

Web APIにおけるキーの管理について以下の記事で述べた。 architecting.hateblo.jp この中でAPIキーを管理するCloudサービスについて名前だけ紹介したが中身までは触れなかった。 ここでは著名なサービスをいくつか取り上げて簡単に説明する。どんなサービス…