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

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

2020-03-01から1ヶ月間の記事一覧

Basic認証、Digest認証、Bearer認証、OAuth認証方式について

API

Basic認証、Digest認証、Bearer認証、OAuth認証方式はRFCで標準化されている認証方式の中で最もよく目にする方式だろう。 Basic認証とDigest認証は多くのサーバ、クライントで実装されており導入障壁が低い認証方式だ。 機密性の高いデータを扱うサービスで…

Web API認証方式のパターン

API

Web API認証の混沌 混沌を整理する 認証とはなにか 1. 標準化されたHTTP認証方式 2. APIキー認証 3. Form認証、アクセストークン認証 Web API認証の混沌 認証に成功しないとWeb APIを叩くことはできない。まずは認証である。 認証方法がWebサービスによって…

POST、PUT、PATCHの違い

API

REST APIなどを使っているとPOST、PUT、PATCHの使い方に悩むことがある。特にPUTとPATCHの違いはわかりずらい上に実際の挙動を見て戸惑うこともある。 REST APIで各HTTPメソッドがどのように振る舞うかは実装依存なのでケースバイケースで調査する必要がある…

URLの構造

API

WebAPIを取り扱う上で欠かせないURLの構造と各要素の呼び方についてまとめる。 ①スキーム 通信手段 ②ホスト名 主にFQDN IPアドレスのこともある ③ポート番号 TCPポート番号 デフォルトは80番 ④リソースパス ディレクトリとファイル名で構成される ⑤クエリ文…

コードの構造化 - システムに組み上げる

アーキテクチャ で結局なにを検討するの? アーキテクチャパターン これまで3回に渡ってコードの分割、分割したコードの結合、そしてグループ化について見てきた。 グループ化してリリースされたコードは他のパッケージやライブラリ、外部システムと組み合…

コードの構造化 - コードのグループ化

凝集度 原則 分類 これまでコードの分割の仕方と、分割したコードの組み合わせ方を見てきた。今回はグループ化について見てみよう。 クラス同士を組み合わせたらそのまま単一のパッケージとしてリリースしてよいのだろうか? 1つのパッケージでリリースした…

コードの構造化 - コードの結合

依存関係 1. 非循環式依存関係の原則 2. 安定依存の原則 3. 安定度・抽象度等価の原則 結合度 指標 分類 前回はコードをコンポーネントに分割することについて学んだ。 分割されたコンポーネントは単体では意味をなさない。コードをコンポーネントに分割した…

コードの構造化 - コードの分割

分割の単位 関数 メソッド クラス モジュール パッケージ ライブラリ マジックメソッド 分割の指針 コードを短時間で書き終えることが目的なら細かく分割せずに1つのコンポーネントにまとめて書いた方が楽だ。 すると後で困る。満足な試験できなくてバグに…

GitHubのMergeオプション

Git

前提 1. Create a merge commit 2. Squash and merge 3. Rebase and merge 比較 まとめ GitのWebUIからブランチをマージしようとするには3つの選択肢が出てくる。 Create a merge commit Squash and merge Rebase and merge 前提 ブランチAをブランチBへマー…

コードレビュー

コードレビューの目的 確認すること 所要時間 コードレビューの単位 コミット単位 複数のコミットに対するレビュー ブランチ単位 形式 インスペクション チームレビュー ウォークスルー ペアレビュー パスアラウンド アドホック レビュータイミング プレコミ…

ウォーターフォール開発への批判

ウォーターフォール うまくいく条件 利点 欠点 批判 IT市場の競争激化 Lean開発という思想 競合の登場 現状 参考 「アジャイル」「アジャイル」とよく耳にする今日このごろ。 では「ウォーターフォール」はどうなったのだろう?そもそもなんでこんなにウォー…

OWASP Top 10

システム開発の現場には自分が書いているコードの脆弱性を気にしない人が結構いる。 「パブリックに公開されないシステムだから」ということだ。気持ちはわからないでもない。確かに非公開サービスが攻撃される可能性は低い。 しかしこれからのセキュリティ…

オーケストレーションツールと構成管理ツール

オーケストレーションツール 構成管理ツール 連携 Chef Puppet Ansible SaltStack Terraform エージェント型とエージェントレス型 エージェント型 エージェントレス型 宣言型と手続き型 宣言型 手続き型 システムの実行を支えるインフラ。サーバ、OS、ミドル…

コンテナ技術のメリット

メリット 1. 起動が早い 2. イメージが軽い 3. 処理が少し早い デメリット 1. OSが選べない 2. カスタマイズ性が低い 3. HW障害やHW交換に弱い 4. ロールバック機能がない 考察 ソフトウェアの実行環境には以下の3つの選択肢がある。 物理サーバ 仮想マシン …

コンテナ技術の歴史

chroot control groups LXC Docker 現在 今のご時世はなんでもコンテナだ。docker、kubernetesは必須知識となった。 しかしコンテナは技術的には新しいものではない。 そんな雑学をひけらかすとユーザから変に信頼されたりたりするので知っておくとよいだろ…

よく使うDockerコマンド

イメージ管理 docker search <image> docker pull <image>:<tag> docker image ls docker image rm <image> docker image build -t <tag> . docker image history <image> docker commit <container> <image> コンテナ管理 docker run <option> <image>:<tag> オプション コマンド 複雑な実行例 参考 dock</option></image></container></image></tag></image></image>…

namespaceがあるXMLをPythonで処理する

XMLのnamespace Pythonでのnamespaceの扱い方 XMLのnamespace XMLでは同姓同名の要素に対して異なるnamespaceを割り当てることで名前の衝突を避けることができる。 例えばプログラミング言語のPythonを表す要素pythonと蛇のパイソンを表す要素pythonは以下の…

minidomによるXML処理

インストール import 読み込み Iterate 要素へのアクセス minidomはDOMの最小実装でありPython標準モジュールの一部だ。 Python標準ライブラリでXMLを処理するならばElement Treeで十分であり、minidomを積極的に利用する場面は思い浮かばない。しかし標準ラ…

Element TreeによるXMLの処理

XML処理をする選択肢 インストール import 読み込み 書き込み Iterate 要素へのアクセス XML処理をする選択肢 PythonでXMLを処理するライブラリは多数ある。以下に有名なものを3つ紹介する。 ライブラリ 標準ライブラリ 説明 minidom o 最小のDOM実装 Elemen…

jsonモジュールによるJSONの処理

インストール import ファイルから読み込む strオブジェクトをJSON形式で読み込む ファイルへ書き込む strオブジェクトを作成 Iterate 要素へのアクセス PythonでJSONを取り扱うならjson一択だ。 簡単な使い方ならPyYAMLやruamel.yamlと大差ない。しかしJSON…

ruamel.yamlによるYAMLの処理

ruamel.yamlとPyYAML 比較 YAML 1.2対応 インストール import 読み込む 書き込む Iterate 要素へのアクセス ruamel.yamlとPyYAML PythonでYAMLを扱うには選択肢が2つある。 PyYAML ruamel.yaml 今日時点で有名なのはPyYAMLの方だがアップデートが収束しつつ…

pipenvによるPython仮想環境管理

インストール 使い方 トラブルシュート 引き続きPythonの実行環境構築についてまとめてみる。 ここまでPythonのバージョン管理、ライブラリ管理の必要性とそれらを実現するpyenv、そしてvirtualenvをみてきた。 architecting.hateblo.jp architecting.hatebl…

virtualenvによるパッケージ管理

基本情報 インストール 使い方 引き続きPythonの実行環境構築についてまとめてみる。 前回はPythonバージョン管理ツール pyenvを紹介した。 Pythonで書かれたツールを実行したり、Pythonで開発する上でPythonのバージョンを切り替えることが重要なことは前回…

pyenvによるPythonバージョン管理

基本情報 インストール 使い方 トラブルシュート Pythonは人気が上昇している言語だ。Python製のツールを実行したい、Pythonでなにかを書きたい、ということは珍しくないだろう。このときPythonのバージョンが大事になる。 Pythonに限らずどんな言語で開発さ…

Gitコマンドのイメージ図

Git

Gitの作業空間は4つある。 RemoteRepository LocalRepository Staging Area Working Directory Gitで作業をしていてこの4つ作業空間で迷子になったことはないだろうか? 「この空間の変更を戻すにはどうするんだっけ?」 「このdiffコマンドはどことどこの差…

Gitコマンド

Git

管理、設定 git init git config 差分管理 git status git add git commit git rm git stash git stash pop Remote Repositoryとの連携 git remote add origin git push git pull git fetch git clone 取り消し git rm --cached git reset git revert ブラン…

JSON

API

基本情報 特徴 YAMLとの比較 オブジェクト 配列 値 JSONはシステム間のデータの交換によく使われるデータフォーマットだ。 YAMLとの違いを理解して状況に応じて適切な選択、データ構造設計、データ処理ができるようになろう。 YAMLについてはこちらで触れて…

YAML

API

基本情報 特徴 シーケンス マッピング 配列とハッシュの組み合わせ スカラ 複数行文字列の扱い アンカーとエイリアス マージ セパレータ フロースタイル 練習問題 YAML JSON YAMLはシステム間のデータ交換や設定ファイルに使われているデータフォーマットだ…

SOLID原則

1. Single Responsibility Principle:単一責任の原則 2. Open/Closed Principle:オープン/クロースドの原則 3. Liskov Substitution Principle:リスコフの置換原則 4. Interface Segregation Principle:インターフェース分離の原則 5. Dependency Invers…

アノテーションインジェクションによるDI

どんなときに使うの? リソースの作成、後処理をクライアントコードに任せずに基盤コード側で実行、制御したいとき。 他のインジェクション方式との比較 コンストラクタインジェクションやセッターインジェクションではリソースの作成、後処理がクライアント…