エンジニアの道具箱
このノートでは、IT業界で働く人(WEBエンジニア、SE、ITコンサルたんとなどを想定)に向けて、現場で困らないための役立つ知識やツール、リンクをまとめていきます。
重要な場面で自分の馴染みのないテーマ(用語)が登場した場合に、まずは本ノートを参照して、そこから最短でそのテーマ(用語)について必要十分な基礎知識を得られることを目標としています。なので、内容をすべて頭に入れる必要はなく、あくまでお守りとしていつでも参照できる状態にしておいてもらえると嬉しいです。
各用語の内容は、「とは?」「具体例(実装例)」「比較される類似のもの」を中心とします。
なお、歴史的な背景など知識を深めるための情報は省き、実用的であることを重視しています。現場の会話で出現するようなテーマ(用語)に重きを置いています。
世界標準の知識をキャッチアップできたほうがいいと思いますので、情報ソースの多くは英語のサイトとしています。
参考:https://www.businessinsider.com/skills-for-google-engineering-jobs-2014-10
クライアントサーバーモデル
client-server model, クライアントサーバーシステム
クライアントサーバーモデルは、サーバーが1つ以上のクライアントにリソースとサービスを提供する仕組みです。
サーバーの例としては、ウェブサーバー、メールサーバー、ファイルサーバーなどがあります。
これらのサーバーはそれぞれ、デスクトップコンピューター、ラップトップ、タブレット、スマートフォンなどのクライアントデバイスにリソースを提供します。
ほとんどのサーバーは、クライアントと1対多の関係にあり、1台のサーバーが一度に複数のクライアントにリソースを提供できることを意味する。
OS
Shell
便利なツール
ネットワークプロトコル
ネットワークにおけるプロトコルはデータのフォーマットと処理のための一連のルールです。ネットワークプロトコルは、コンピュータの共通言語のようなものです。ネットワーク内のコンピューターは、全く異なるソフトウェアやハードウェアを使用している場合がありますが、プロトコルを使用することにより、それらに関係なく相互に通信することができます。
例えば、HTTP, SMTP, TCP, UDP, IP, ARP, ICMPなどがあります。
https://www.cloudflare.com/learning/network-layer/what-is-a-protocol/
FTP
File Transfer Protocol
FTPは、クライアントからサーバーへ、またはサーバーからクライアントへファイルを転送することができます。
HTTP
ロードバランサー
REST API
API設計
キャッシュ
プーリング
リーダーエレクション
Peer to Peer
可用性
プロキシ
フォワードプロキシサーバー例:squid
構築:jlesage/nginx-proxy-manager
https://hub.docker.com/r/jlesage/nginx-proxy-manager
Nginx
MapReduce
ハッシュ化
CPU
Central Processing Unit、プロセッサーとも呼ぶ。
データを読み書きしたり、計算をしたり各部署へ指示を出すパソコンの脳みそのような役割のパーツ。
高性能なCPUを使えば、アプリケーションの実行速度を高めることができます。頭の回転が速くなるイメージです。
CPUに関する問題集
https://note.com/techstar/n/nf911ea04358e
OS
Shell
便利なツール
データベース
レプリケーション
SQL
データ基盤
統合サービス
SaaS
種類
SaaS構築
設計
Docker
RegistryからDocker imageを取得するのではなく、Dockerfileをbuildして、Docker imageを作成する場合もあります。
無料のコース
Kubernates
無料のトレーニング
データの表現フォーマット
JSON
JavaScript Object Notation
例
{"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
便利なサイト
その他参考
https://www.oracle.com/jp/database/what-is-json/
バージョン管理システム
GitHub
公式ドキュメント
無料トレーニング
CI/CD
ビルド(プログラムのバイナリ化)-> テスト -> デプロイ
の自動化。Infrastructure as Code(IaC)も登場する。
GitHub Actions
GitHub Actionsのコンポーネント
公式ドキュメント
無料のトレーニング
無料のハンズオントレーニング
Azure×GitHub Actions
クラウドサービスプラットフォーム
各社サービス比較
From GCP
From Azure
From OCI
https://www.oracle.com/cloud/service-comparison/
Azure
無料のトレーニング
学習系
個人的には、Googleが直接提供しているサービスが一番信頼できます。
初学者向け
中級者向け
コーディング面接(競技プログラミング)
Dynamic Programming (動的計画法)
中級者への登竜門である動的計画法
偉人
用語集
情報収集
英語で検索
個人的には英語の記事のほうが日本語の記事より量も質も充実していることが多い印象です。
しかし、英語での検索では、キーワード選定にすこしコツがいる(直訳したキーワードでなヒットしないなど)ので、役に立ちそうな例を記載していきます。
例えば、『xx やってみた』で入門手順を動かしてみた系の記事を見つけたい場合、I did xxでは全く求めた結果がヒットしません。英語圏の人はそんな言い方をしないからです。また、すこし意訳して、Ii tried xxだとネガティブなニュアンス(I tried xx, but it failed…) が含まれるのでこれも求めるものとは違った検索結果になるでしょう。
『やってみた』に近いニュアンスでは、以下のような言い回しがよく使われますので、効率よく英語の記事を見つけるためにはこれらをあらかじめ知っている必要があるのです。
xx やってみた => xx tutorial, xx quick start, xx get started, xxx getting started
日本語記事が混ざらないのと、キーワードのレコメンドが正確になるため、英語版の Google を使ったほうがいいです。
道具箱 => toolbox
xx とは => define: xx / what is xx
xx 種類 => types of xxx / xxx category
xx 一覧 => list of xx
xx まとめ => best xxx(s:複数形)
xx 使い方 => how to use xxx
xx 学習方法 => how to master xx
xx やってみた => xx tutorial / xx quick start / xx get started
xx 入門 ⇒ xx 101 / xx crash course / xx for beginners / xx introduction / xx beginner’s guide
xx コツ(スキル、術) => the art of xx / xx tips
art には「芸術」以外にも「技術、わざ、要領、コツ」などの意味があります。知識としてではなく、経験を通して習得するものをいいます。
xxとyyの違い => xx vs yy
xx 0から構築 => xx from scratch
xx 初級/中級/上級 => xx beginner/intermediate/advanced
xx 例 => xx example
xx 原因 => why xx…
ハッシュタグ xx => #xx
参考
https://localghost.dev/blog/everything-i-googled-in-a-week-as-a-professional-software-engineer/
https://www.makeuseof.com/21-tips-and-tricks-to-master-the-art-of-googling-as-a-developer/
https://livecodestream.dev/post/search-on-google-like-a-pro/
開発のための便利なツール探し