Skip to content

どうして言語は一つにならないの? 〜相対化して学ぶプログラミング言語論

公開日:

旭川リサーチセンターで開催された『TechRAMEN 2025 Conference』発表しました。

Download PDF

スライドテキスト

Page 1

どうして言語は一つにならないの?

〜相対化して学ぶプログラミング言語論

Is there a "Best" programming language?

A comparative look at How they work

pixiv Inc.

USAMI Kenta

2025-07-25 #techramen25conf

1 旭川リサーチセンター - TechRAMEN 2025 Conference

Page 2

お前誰よ

• うさみけんた (@tadsan) / Zonu.EXE / にゃんだーすわん

• ピクシブ株式会社 Platform Div > WebTechnology Team PHPer

• 2012年末から現職、APIとかCIとかいろいろなところを見つめてきました

• 最近チームが再編されてインフラっぽい仕事もしてます

• Emacs PHP Modeを開発しています (2017年-)

• プログラミング言語にちょっとこだわりのある素人 (spcamp2010)

2

Page 3

出身地は札幌と旭川の間

3

Page 4

PHPカンファレンス

4

Page 5

昨年のTechRAMEN

5

Page 6

プログラミング言語史

6

Page 7

あした後日祭やります

7

Page 8

今回のお題

8

Page 9

9

Page 10

会社の飲み会で

同僚に言われました

10

Page 11

Q. えっと tadsanが

やってる言語って

なんだっけ?

11

Page 12

僕はプログラミング

言語が趣味みたいな

人間なので

いっぱいやってます

12

Page 13

僕はプログラミング

言語が趣味みたいな

人間なので

いっぱいやってます

13

Page 14

A. 外部でよく発表

してるのはPHP

14

Page 15

Q. なんで言語っていっぱい

あるの? そのうち

一個にならない?

15

Page 16

A. いい質問ですね!

16

Page 17

特に初心者は

覚えることが多い

17

Page 18

Web開発は多言語を要求しがち

• バックエンド言語どれか

• JavaScript(Node.js), Ruby, Python, Java, C#, PHP, ...etc.

• フロントエンド

• HTML, JavaScript, TypeScript, CSS, ...etc.

• その他

• SQL, 正規表現, シェルスクリプト ...etc.

18

Page 19

どれか1つにならんか

と願いたくなる

気持ちはわかる

19

Page 20

言語を1個だけ覚えたら

なんでも作れる!

20

Page 21

ゲームも作れるし

システム開発もできる

21

Page 22

そうなったら

いいのにな…

22

Page 23

ところで

23

Page 24

言語 #とは

24

Page 25

自然言語

人間が日常的に使う

25

Page 26

人工言語

人間が目的をもって

設計した言語

26

Page 27

Q.

(自然言語)何言語

知っていますか?

27

Page 28

日本語 英語 中国語 韓国語

ドイツ語 フランス語 タイ語

ヒンディー語 マレー語…

28

Page 29

言語って

結構いっぱいある

29

Page 30

日本人は結構

何か国語 母国語

って言っちゃいがち

30

Page 31

国≠言語

31

Page 32

エスノローグ調べ

公用語

(手話を除く)

1

日本 13

(事実上)

インド 22 717

EU加盟国 24 153

32

Page 33

エスノローグ調べ

公用語

(手話を除く)

1

日本 13

(事実上)

インド 22 717

EU加盟国 24 153

32

Page 34

国際SILという団体に

よる言語調査

エスノローグ調べ

公用語

(手話を除く)

1

日本 13

(事実上)

インド 22 717

EU加盟国 24 153

32

Page 35

国際SILという団体に

よる言語調査

エスノローグ調べ

公用語

(手話を除く)

1

日本 13

(事実上)

インド 22 717

EU加盟国 24 153

32

Page 36

国際SILという団体に

よる言語調査

エスノローグ調べ

公用語

(手話を除く)

1

日本 13

(事実上)

インド 22 717

EU加盟国 24 153

32

Page 37

国際SILという団体に

よる言語調査

エスノローグ調べ

公用語

(手話を除く)

1

日本 13

(事実上)

インド 22 717

EU加盟国 24 153

32

Page 38

Q.

(自然言語)何言語

しゃべれますか?

33

Page 39

私は日本語しか

しゃべれません

\(^o^)/

34

Page 40

世界にプログラミング

言語は何種類あるで

しょうか

35

Page 41

151種類!

36

Page 42

…と断言してくれるオーキ

ド博士がいてくれたらよ

かったのですが… そのよう

に明快な回答は出せない

37

Page 43

(計算機言語)何言語

言えますか?

38

Page 44

GitHubの言語検出

39

Page 45

GitHubの言語検出 594

39

Page 46

コンピュータ言語

• 人工的に作られた言語のうち、コンピュータで処理することを

前提に設計された言語

• データ記述言語 (HTML, XML, JSON, Markdown, ...etc.)

• 問い合わせ言語 (SQL, SPARQL, …etc.)

• スタイルシート言語 (CSS, XSL, …etc.)

• プログラミング言語 (C言語, JavaScript, Ruby, Python, ...etc.)

40

Page 47

このトークでは言語の種類

を厳密には区別しない…

41

Page 48

が、分類する必要性が生じ

ている時点で統一無理そう

という予感がしてくる

42

Page 49

プログラムで全てを司る

• 汎用のプログラミング言語、だいたい何でも書ける

• データも記述できる

• 問い合わせもできる

• スタイルシートも埋め込める

• もちろんプログラムも書ける (それはそう)

43

Page 50

データ記述言語もなんでもできる

• 例: GitHub Actions (YAML)

• GitHubで処理させることをYAMLで記述する

• 制御構造を持っていて、ほかのActionsを呼び出せる

• 構文としてはYAMLだが、これって独自のプログラミング言語では?

44

Page 51

データと処理の世界を往復する

• Lispという言語はプログラムをS式というリスト形式で記述する

• 関数は (format “string”) のような形式で記述する

• マクロという言語機能によって、コンパイル過程でプログラムを生成できる

• データとプログラムが同じ構造をとっている (同図像性)

• eval という機能でリストをプログラムとして実行できる

• Julia, Elixirなどの言語はS式ではないが、この性質を受け継いでいる

45

Page 52

46

Page 53

46

Page 54

46

Page 55

46

Page 56

eval

• evaluation (評価)

• プログラムの実行中に文字列やリスト形式のプログラムを実行することで、

柔軟な実行時処理を実現できる

• 非常に強力だが、多用しすぎると処理が追いにくい意味不明なプログラムに

なりがち

• 現代となっては(Lisp以外の世界では)使うなという風評になっている

47

Page 57

なんでもできる

難しい

48

Page 58

プログラムで全てを司る

• 汎用のプログラミング言語、だいたい何でも書ける

• 良いことも、悪いことも、なんでも記述できる

• 意図しない記述で無限ループに陥るとか

• 「大いなる力には大いなる責任が伴う」

• LispやRubyなどはこういう考えが前提にありそう

49

Page 59

式言語 (expression language)

• ユーザーに計算式やロジックなどを入力させたいケースがある

• 汎用のプログラミング言語よりもシンプルな計算式や数学関数だけを持つ

「式言語」を提供することで、プログラミング

• プログラミング言語そのものを入力させると

任意コード実行(ACE: Arbitrary Code Execution)が成立しうる

• 悪意がなくても、うっかりで停止しないプログラムを書けてしまう

50

Page 60

Excel数式

• スプレッドシートのセルに数式を書くと、計算結果が画面に表示される

• 基本的には「命令」は書けなかった (過去形)

• 近年はExcelではPythonプログラムを書けたり、

Google SpreadsheetsではJavaScriptを書けるようになった

51

Page 61

Write once, run anywhereの夢

• Javaは「一度書けばどこでも動く」マルチプラットフォーム性を謳っていた

• 汎用的なライブラリなどは共通化できるが、アプリケーションとしては

環境固有の実装が必要

• 現代でもReact Native(JavaScript), Flutter(Dart), KMP(Kotlin

Multiplatform) などマルチプラットフォームの環境は多い

• WebAssembly(WASM)

52

Page 62

プログラミング言語の

パラダイム

53

Page 63

なんちゃら型、なんちゃら指向

• 一般に普及しているプログラムは「手順」を順番に記述する (手続型)

• C言語(手続き型)→C++, Java, C#(オブジェクト指向)

• どれもC言語を発展させたような言語と捉えられる(互換性はない)が、

それぞれのアプローチは非常に違っている

• 関数を基本的な単位とするパラダイム (関数型)

54

Page 64

PHPはどこでも65点がとれる言語

• 「現代におけるプロダクト開発とPHPを選定するワケ #phpkansai」

• By @potato4d (PHPカンファレンス関西2017)

• 小難しいことを考えずに簡単にWebアプリを書ける(HTML+α)の言語

• なんだかんだいってWEB+DB連携がさくっとできる言語ランタイムとして

の存在感は健在

• 求められているのは素晴らしい言語ではなく簡単に使える言語

55