今週勉強したことまとめ(2017/11/11 ~ 2017/11/26)
勉強したことについてメモしたものを一週間ごとにまとめてみることにした。 ブログのネタになりそうなものがあれば、ここから記事にまとめるところまでいけると良い。 初回は2週間分になってしまっている。まとめ方が難しい。
Java
Arrays.asList
は固定長のリストを生成するのでaddやremoveできないnew ArrayList<>(Arrays.asList())
を使う
- lombokで
@Data
をつけるときは@Builder
の後につけないとGetterやSetterが正しく作成されずエラーになる - synchronizedブロック
- 他のスレッドから割り込まれないようにブロックする
- KeyStore
- 公開鍵や証明書のためのリポジトリ
- Java Development Kitは、フォルダ
jre/lib/security/cacerts
にCAキーストアを保持する
- keytool
Spring Framework
- ErrorControllerインタフェースは
@Controller
がエラーのレンダリングに使用されていることを示すためのマーカーインタフェース- 主にセキュアにする必要のないエラーパスを知るために使用される
- SpringBootはデフォルトで全てのエラーをハンドルする
/error
にマッピングする- /errorをハンドリングするコントローラを実装すればそこでエラーレスポンスをいじれる
server.error.whitelabel.enabled=false
を設定することでデフォルトのエラーページを非表示にできる@ResponseStatus
は返すべきステータスコードと理由とともにメソッドや例外をマークするSpringBoot Actuator
- アプリのモニタリングや管理機能を提供するSpringBootのサブプロジェクト
- NamedJdbcTemplate
CQRS
- コマンドクエリ責務分離
- 質問することで答えを変えてはいけない
- 全ての基本操作がコマンドかクエリになる
- コマンドはシステムの状態を変更する
- クエリは状態を変更せず報告する
Editor
editorconfig
- さまざまなエディタ上でコーディングスタイルを統一できるツール
- .editorconfigファイルを作成しておけば各エディタのプラグインでコーディングスタイルが統一できる
- 行末の空白は EditorConfig で始末しましょう
- さまざまなエディタ上でコーディングスタイルを統一できるツール
-
analyze -> inspect code
で問題のある箇所を全て発見できる
mysql
show variables like '%time_zone%';
でtimezoneを確認できる- 事前にデータ投入をした MySQL Docker イメージを作る場合は /docker-entrypoint-initdb.d を活用すると便利
Redis
- Redisの戦略
Test
- unit test
- テストの定義「ある条件下においてソフトウェアの振る舞いを記録し、その記録が期待される結果となることを検証するプロセス」
- テストケース -> ひとつのテスト項目のこと
英語
- via: ~することで
- with: 使用して
DNS
AWS
ECS
- Amazon Elastic Container Service
- Amazon EC2 インスタンスのクラスタ全体にDocker対応アプリケーションを簡単にデプロイし管理できる
- ECS
- ECS運用のノウハウ
ECR(EC2 Container Registory)
- AWSが提供するDockerレジストリサービス
- レジストリがイメージリポジトリとイメージを管理する
Error response from daemon: Get https://.dkr.ecr.ap-northeast-1.amazonaws.com/v2/: proxyconnect tcp: dial tcp : getsockopt: connection refused
が出たらDocker再起動でなおった
AWS Shield Advanced
Docker
docker build
コマンドはDockerfile
とコンテクストによってイメージを構築するコンテクスト
tag
- 同じタグをつけると新しいimageにつけ変わる
ネットワーク機能
- Docker ネットワーク機能の概要
- ユーザが自分自身でネットワークを定義し、コンテナを接続できる
docker network ls
でネットワークのリストを表示- デフォルトで以下の三つのネットワークが生成される
- brigdge
- null
- host
docker run --network=<NETWORK>
でコンテナがどのネットワークに接続するかを指定できる- このオプションを指定しない限りデフォルトのbridgeに接続される
docker-compose
- depends_onとlinkの違い
- v2では違いはない、v1ではdepends_onはコンテナの作成順序と依存関係を解決するのに対して linkはそれに加えてエイリアス名を使用してコンテナにアクセスできるようになる
- depends_onとlinkの違い
Circle CI
- localで実行するにはcircleci CLIツールをインストールする
curl -o /usr/local/bin/circleci https://circle-downloads.s3.amazonaws.com/releases/build_agent_wrapper/circleci; and chmod +x /usr/local/bin/circleci
- シンタックスチェック
circleci config validate -c .circleci/config.yml
- ビルド
circleci build
- CircleCI 2.0 Beta における Docker イメージのビルド
bash
- bashのpipefailで確実にスクリプトを止める
- bashに-e(エラーがあったら止める)をつけてもパイプラインの左側のコマンドにエラーがあったときに処理が止まらない
set -o pipefail
を指定しておくと止まる
fish shell
- && はfishでは
; and
と書く
Code coverage
- Codecov
- カバレッジ可視化ツール
- jacoco
- Java(Maven) + Docker + CircleCI + CodecovなCI環境にしたメモ
Mac
ip
コマンドをインストールする方法brew install iproute2mac
KarabinerElementsで外部キーボード接続時に内部キーボード無効化
- Devices > Disable the buildin....
iPhone
Network
ブリッジ
- レイヤー2で異なるネットワーク間を通信できるようにする装置
NIC(ネットワークインタフェースカード)
- eth0, eth1, eth2...という順番で名前がつく
- lo0
- gif0(generic tunnel interface)
- stf0(6to4 tunnel interface)
- p2p0
- AirDropのインタフェース
- awdl0
- utun0
- Back to My Mac(どこでもMy Mac)用のインタフェース?
MTU
- ネットワークにおいて1回の転送(1フレーム)で送信できるデータの最大値を示す伝送単位
高速化
その他
- C10K問題
- 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと
- TheC10kProblem