Skip to content

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

公開日:

北海道旭川市旭川リサーチセンターで開催された『TechRAMEN 2025 Conference』でレギュラーセッション(30分)として発表しました。

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旭川リサーチセンター - TechRAMEN 2025 Conference

Page 2

お前誰よ

  • うさみけんた (@tadsan) / Zonu.EXE / にゃんだーすわん
  • ピクシブ株式会社 Platform Div > WebTechnology Team PHPer
  • 2012年末から現職、APIとかCIとかいろいろなところを見つめてきました
  • 最近チームが再編されてインフラっぽい仕事もしてます
  • Emacs PHP Modeを開発しています (2017年-)
  • プログラミング言語にちょっとこだわりのある素人 (spcamp2010)

Page 3

出身地は札幌と旭川の間

Page 4

PHPカンファレンス

Page 5

昨年のTechRAMEN

Page 6

プログラミング言語史

Page 7

あした後日祭やります

Page 8

今回のお題

Page 9

Page 10

会社の飲み会で同僚に言われました

Page 11

Q.「えっと、tadsanがやってる言語ってなんだっけ?」

Page 12

僕はプログラミング言語が趣味みたいな人間なのでいっぱいやってます

Page 13

僕はプログラミング言語が趣味みたいな人間なのでいっぱいやってます

Page 14

A.「外部でよく発表してるのはPHP」

Page 15

Q.「なんで言語っていっぱいあるの? そのうち一個にならない?」

Page 16

A.「いい質問ですね!」

Page 17

特に初心者は覚えることが多い

Page 18

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

  • バックエンド言語どれか
  • JavaScript(Node.js), Ruby, Python, Java, C#, PHP, ...etc.
  • フロントエンド
  • HTML, JavaScript, TypeScript, CSS, ...etc.
  • その他
  • SQL, 正規表現, シェルスクリプト ...etc.

Page 19

どれか1つにならんかと願いたくなる気持ちはわかる

Page 20

言語を1個だけ覚えたらなんでも作れる!

Page 21

ゲームも作れるしシステム開発もできる

Page 22

そうなったらいいのにな…

Page 23

ところで

Page 24

「言語」#とは

Page 25

「自然言語」人間が日常的に使う

Page 26

「人工言語」人間が目的をもって設計した言語

Page 27

Q.(自然言語)何言語知っていますか?

Page 28

日本語、英語、中国語、韓国語ドイツ語、フランス語、タイ語ヒンディー語、マレー語…

Page 29

言語って結構いっぱいある

Page 30

日本人は結構「何か国語」「母国語」って言っちゃいがち

Page 31

国≠言語

Page 32

公用語エスノローグ調べ

(手話を除く)

日本

(事実上)

インド

EU加盟国

Page 33

公用語エスノローグ調べ

(手話を除く)

日本

(事実上)

インド

EU加盟国

Page 34

国際SILという団体による言語調査

公用語エスノローグ調べ

(手話を除く)

日本

(事実上)

インド

EU加盟国

Page 35

国際SILという団体による言語調査

公用語エスノローグ調べ

(手話を除く)

日本

(事実上)

インド

EU加盟国

Page 36

国際SILという団体による言語調査

公用語エスノローグ調べ

(手話を除く)

日本

(事実上)

インド

EU加盟国

Page 37

国際SILという団体による言語調査

公用語エスノローグ調べ

(手話を除く)

日本

(事実上)

インド

EU加盟国

Page 38

Q.(自然言語)何言語しゃべれますか?

Page 39

私は日本語しかしゃべれません

\(^o^)/

Page 40

世界にプログラミング言語は何種類あるでしょうか

Page 41

151種類!

Page 42

…と断言してくれるオーキド博士がいてくれたらよかったのですが… そのように明快な回答は出せない

Page 43

(計算機言語)何言語言えますか?

Page 44

GitHubの言語検出

Page 45

594

GitHubの言語検出

Page 46

コンピュータ言語

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

前提に設計された言語

  • データ記述言語 (HTML, XML, JSON, Markdown, ...etc.)
  • 問い合わせ言語 (SQL, SPARQL, …etc.)
  • スタイルシート言語 (CSS, XSL, …etc.)
  • プログラミング言語 (C言語, JavaScript, Ruby, Python, ...etc.)

Page 47

このトークでは言語の種類を厳密には区別しない…

Page 48

が、分類する必要性が生じている時点で統一無理そうという予感がしてくる

Page 49

プログラムで全てを司る

  • 汎用のプログラミング言語、だいたい何でも書ける
  • データも記述できる
  • 問い合わせもできる
  • スタイルシートも埋め込める
  • もちろんプログラムも書ける (それはそう)

Page 50

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

  • 例: GitHub Actions (YAML)
  • GitHubで処理させることをYAMLで記述する
  • 制御構造を持っていて、ほかのActionsを呼び出せる
  • 構文としてはYAMLだが、これって独自のプログラミング言語では?

Page 51

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

  • Lispという言語はプログラムをS式というリスト形式で記述する
  • 関数は (format “string”) のような形式で記述する
  • マクロという言語機能によって、コンパイル過程でプログラムを生成できる
  • データとプログラムが同じ構造をとっている (同図像性)
  • eval という機能でリストをプログラムとして実行できる
  • Julia, Elixirなどの言語はS式ではないが、この性質を受け継いでいる

Page 52

Page 53

Page 54

Page 55

Page 56

eval

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

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

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

なりがち

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

Page 57

なんでもできるは難しい

Page 58

プログラムで全てを司る

  • 汎用のプログラミング言語、だいたい何でも書ける
  • 良いことも、悪いことも、なんでも記述できる
  • 意図しない記述で無限ループに陥るとか
  • 「大いなる力には大いなる責任が伴う」
  • LispやRubyなどはこういう考えが前提にありそう

Page 59

式言語 (expression language)

  • ユーザーに計算式やロジックなどを入力させたいケースがある
  • 汎用のプログラミング言語よりもシンプルな計算式や数学関数だけを持つ

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

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

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

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

Page 60

Excel数式

  • スプレッドシートのセルに数式を書くと、計算結果が画面に表示される
  • 基本的には「命令」は書けなかった (過去形)
  • 近年はExcelではPythonプログラムを書けたり、

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

Page 61

Write once, run anywhereの夢

  • Javaは「一度書けばどこでも動く」マルチプラットフォーム性を謳っていた
  • 汎用的なライブラリなどは共通化できるが、アプリケーションとしては

環境固有の実装が必要

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

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

  • WebAssembly(WASM)

Page 62

プログラミング言語のパラダイム

Page 63

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

  • 一般に普及しているプログラムは「手順」を順番に記述する (手続型)
  • C言語(手続き型)→C++, Java, C#(オブジェクト指向)
  • どれもC言語を発展させたような言語と捉えられる(互換性はない)が、

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

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

Page 64

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

  • 「現代におけるプロダクト開発とPHPを選定するワケ #phpkansai」
  • By @potato4d (PHPカンファレンス関西2017)
  • 小難しいことを考えずに簡単にWebアプリを書ける(HTML+α)の言語
  • なんだかんだいってWEB+DB連携がさくっとできる言語ランタイムとして

の存在感は健在

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