技術書を読んでると「動的」「静的」ってよく出てくるけどどういうこと?
おはようございます。タカヒデです。
技術書を読んでいたりとか、エンジニアの方と話していると、よくこんな言葉を耳にしませんか?
「動的サイト」とか…「静的型付け言語」とか…
聞くんですよ。
私はエンジニアでもないのによく聞くんですよ。
もうね、その瞬間話についていけなくなってしまいます。
「静的ってなに?」「動的ってどういうこと?」
そんな私自身の疑問に解決するのが本日の記事です。
- 「動的」「静的」という言葉の意味を知りたい
- よくわからないけど「動的」「静的」という言葉をよく耳にする
同じような疑問を持っている方の解決に繋がれば幸いです。
そもそも「動的」「静的」の語源とは?
まあ「動きがあるか」「変化があるか」そんな感じかな?
とフワッとした理解をしていたのが、この記事を書く前の私の理解です。
そんな「動的」「静的」という言葉を、まずは言葉のルーツから見てみましょう。
動的(Dynamic)
「動的」は英語の「Dynamic」が語源で、さらにさかのぼるとギリシャ語の「dynamis(力・動く力)」に由来するそうです。
つまり「動的サイト」は「ダイナミックなサイト」ということですね。
何か分からないけど凄そうなサイトじゃありませんか。
この「動的」という言葉は、ITの世界では「状況に応じて変わる」「実行中に決まる」といった意味で使われています。
私のフワッとした理解も間違いではなさそうですね。
静的(Static)
「静的」は英語の「Static」が語源で、ギリシャ語の「statikos(立っている・固定された)」が元になっています。
つまり「静的サイト」は「スタティックなサイト」ということです。
はい、よくわかりません。
「ダイナミック」は分かるけど「スタティック」は分かりません。
普段つかわないので。
まあ分からないものは分からないので今覚えるようにしましょう。
ITでは「事前に決まっている」「固定されていて変わらない」というニュアンスを持ちます。
つまり「最初に決まってそのまま変化しないもの」という感じですかね。
シンプルに整理してみましょう。
- 動的:実行中に決まる、状況に応じて変わる
- 静的:あらかじめ決まっている、固定されている
このように、「どのタイミングで決まるか」というのがポイントのようです。
「動的」「静的」を様々な事例で理解してみよう
頭の良い方はこれで理解できるかもしれませんが、頭の弱い私はこれだけでは理解できません。
具体的な事例を元に「動的」「静的」の違いを見ていきます。
事例①:「動的型付け言語」と「静的型付け言語」
まず最初に分からなかったのが、この「静的型付け言語」と「動的型付け言語」です。
プログラミング言語の話で出てきます。
動的型付け言語
動的型付け言語では、変数などのデータ型が実行中に決まります。
柔軟に書ける反面、実行するまでエラーに気づきにくいこともあります。
x = 10
x = "hello"例えばこんなコードでも実行できてしまうわけですね。
- Python
- Ruby
- JavaScript
この、「動的型付け言語」には、
- 書きやすい
- 学習コストが低い
- 試作や個人開発に向いている
といった特徴があります。
静的型付け言語
静的型付けの言語では、変数の型が事前に決まっています。
コンパイル時点で型チェックが行われるため、実行前にエラーを発見できます。
int x = 10;
x = "hello";「hello」はint型ではないため、上記コードは実行できずエラーになってしまいます。
- Java
- Go
- TypeScript
この、「動的型付け言語」には、
- 安全性が高い
- 大規模開発に向いている
- 記述がやや厳格
といった特徴があります。
事例②:「動的ページ」と「静的ページ」
次の事例は「動的ページ」と「静的ページ」です。
ページ単位ではなくサイト単位でみると「動的サイト」「静的サイト」とも言えます。
これはWebの本などを読んでると出てくる言葉ですね。
Webサイトでみるページが動的か静的か?という話です。
動的ページ
動的ページは、アクセス時にサーバー側で内容を生成します。
ユーザーや状況に応じて表示内容が変わるのが特徴です。
- ログイン後のマイページ
- ECサイトの購入履歴
- WordPressの記事ページ
WordPressは典型的な「動的サイト」と言えます。
つまりこの記事のページも動的サイトということですね。
静的ページ
静的ページは、HTMLファイルの内容をそのまま表示します。
誰がアクセスしても、基本的に同じ内容が表示されます。
- 会社紹介ページ
- シンプルなLP
- ドキュメントサイト
あなたの所属している会社の紹介ページも静的サイトの一つかもしれませんね。
事例③:「動的リンク」と「静的リンク」
お次は「動的リンク」と「静的リンク」です。
ページやサイトはイメージできても、これは全くイメージできません。
リンクに動的も静的もあるのでしょうか?
前提としてお伝えしておくと、この「リンク」は、外部リンクなどの言葉でよく使われる「ページ遷移のリンク」とは異なるようです。
これは主に、プログラムとライブラリをどう結びつけるかという仕組みの違いを表しています。
この前提知識が無いとさっぱりわからないのでご注意ください。
動的リンクとは
動的リンクとは、プログラムの実行時に、外部のライブラリを読み込む方法です。
実行ファイルには「このライブラリを使います」という情報だけが含まれており、実際のライブラリ本体は、実行時にOSや環境から読み込まれます。
動的リンクの主な特徴はこちらです。
- 実行ファイルのサイズが小さい
- ライブラリの更新がしやすい
- 実行環境にライブラリが必要
多くのOSやアプリケーションでは、この動的リンクが一般的に使われています。
静的リンクとは
静的リンクとは、プログラムを作る段階に、必要なライブラリをすべて実行ファイルに組み込む方法です。
この方式では、完成した実行ファイルの中に、使うライブラリのコードが含まれています。
そのため、実行時に外部ライブラリを探しに行く必要がありません。
静的リンクの主な特徴は次の通りです。
- 実行時に外部ライブラリが不要
- 単体で動作する
- 実行ファイルのサイズが大きくなりやすい
環境に依存せずに動かしたいツールなどで使われることが多い方式です。
事例④:「動的解析」と「静的解析」
最後に「動的解析」と「静的解析」です。
「解析」とは?はて?研究者ですか?
と、思ってしまいがちですが、これは「コードのチェック」を指します。
コードをチェックする方法にも「静的」「動的」があるようです。
動的解析
動的解析はプログラムを実行しながら、挙動を確認する方法です。
実行時エラーやパフォーマンス問題を発見できます。
- デバッガ
- プロファイラ
- 実行時ログ分析
動的解析は「動かしてみないと分からないこと」をチェックするために行うようです。
静的解析
静的解析はプログラムを実行せずに、コードをチェックする方法です。
文法ミスや型エラーなどを事前に検出できます。
- lintツール
- 型チェック
- 構文チェック
まとめ
以上、「動的」「静的」を様々な事例で理解してみました。
- 動的:「状況に応じて変わる」「実行中に決まる」
- 静的:「事前に決まっている」「固定されていて変わらない」
これで「静的リンクが…」とか「Pythonは動的型付け言語だから…」とか言われても話についていけますね。
お疲れさまでした。
