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

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

2020-01-01から1年間の記事一覧

TLS

API

背景 HTTPSは以前は暗号化にSSLを利用していた 現在はTLSを利用している 今でもSSLとTLSを指して「SSL」と呼ぶことがある TLSはRFC 8446(The Transport Layer Security (TLS) Protocol Version 1.3)で規定されている RFC 8446の規定は結構緩いがTLS_RSA_WI…

Public Key Infrastructureについて

API

Web API開発においては認証や暗号化のために証明書を利用することは多い。 こういうコードと関係ない部分はセキュリティ担当のインフラ屋さんに丸投げしたくなる気持ちはわかる。 しかしつまらないところではまって時間を無駄にしないよう最低限の知識は身に…

APIキーの保管

API

Web APIを叩くにはAPIキー、シークレット、Credentialが必要だ。 こういった情報をどのように管理すべきだろうか。 ハードコードすると変更するのが大変だ。ソフトコードすると少し変更しやすくなるがそれでもビルドが必要になってしまう。それにソフトコー…

Web APIで発生するエラーの対処

API

エラーが発生しないシステムは存在しない。回復できるエラーからは回復し、回復できないエラーからは適切な情報を残して終了することがシステムには求められる。 Web APIも同様だ。サーバ内でエラーが発生することもある。ネットワーク障害の影響を受けるこ…

Web APIのデータ圧縮

API

Web APIの性能を最適化する方法としてPagination、キャッシング、圧縮がある。今回は圧縮についてを取り上げる。 既に取り上げたPaginationとキャッシュについてはこちらを参照いただきたい。 architecting.hateblo.jp architecting.hateblo.jp メリット 通…

Web APIのキャッシュ

API

Web APIの性能を最適化する方法としてPagination、キャッシング、圧縮がある。 今回はキャッシングについてを取り上げる。 既に取り上げたPaginationについてはこちらを参照いただきたい。 architecting.hateblo.jp メリット 応答速度が上がる。 サーバの負…

Web APIのPagination

API

Web APIは元来、軽量なAPIだ。 しかしデータサイズが大きくなれば重くなる。応答速度が極めて重要な場面もあるかもしれない。 そんなとき、Web APIの性能を最適化する方法として利用できるのがPagination、キャッシング、圧縮である。 今回はPaginationにつ…

Dependency Injectionパターン

設計においてクラス間の独立性を高めることは重要である。 クラス間の独立性を高める方式の1つにDependency Injectionパターンがある。今回はDependency Injectionパターンについて説明する。 概要 日本語には「依存性注入」と訳される。この言葉からDIがど…

モジュール性の高い設計

以前、「コードの構造化」というタイトルでソフトウェアのモジュール化について述べた。 このときは初学者にもついていけるよう、「コードの分割」、「コードの結合」、「コードのグループ化」、「システムに組み上げる」という4つステップに分けてボトムア…

Mapの繰り返し処理基本3パターン

拡張for文を用いたListの繰り返し処理は初学者でも覚えやすいですね。 for (String item : list) { System.out.println(item); } 一方でMapの繰り返し処理が分かりづくてMapを避ける初学者がいます。 Mapはとても便利なので避けてよいことはありません。基本…

JavaでLogging

「素人コードにこれをパパッと加えればたちまちお店の味に」というソフトウェア業界の「味の素」がLoggerだと思います。Loggerは加えておいて損はありません。 逆に素人感満載になるのが「System.out.println」です。使い所次第ですが、多くの場合はBad Prac…

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…