なぜ2018年にIDEとEmacsを選ぶのか

公開日:

Download PDF

スライドテキスト

Page 1

なぜ2018にIDEと   Emacsを選ぶのか

Why was IDE and Emacs chosen, now in 2018?

#techbeerbash

2018-02-19 FJCT

Tech Beer Bash 2018 vol.1

Page 2

お前誰よ
うさみけんた (@tadsan) / Zonu.EXE

  • GitHub/Packagistでは id: zonuexe
    • ピクシブ株式会社技術基盤チーム (pixiv.net)
  • Emacs Lisper, PHPer
  • 入社前は自宅警備をしながらRuby書いてた
    • Emacs PHP Modeのメンテナ引き継ぎました
    • Qiitaに記事を書いたり変なコメントしてるよ

Page 3

Page 4

Page 5

Page 6

アジェンダ

Page 7

1. はどんな言語か

PHP
2. でなにができるか

Emacs
3. に何を期待するか

IDE

Page 8

はじめに
言っておく

Page 9

実用的なPHPの Emacs環境構築

Page 10

Page 11

エディタくらい
好きなの選びたい

Page 12

勝つとか負けると
かの話ではない

Page 13

エディタ選択は 専門職たるエンジ ニアの裁量の範疇

Page 14

本当にそれでエラー

を起こさない
自信があるならな

Page 15

僕は自信がない

Page 16

pixiv

PhpStorm
<3

希望者はIDEのライセンス購入

(IntelliJ IDEA, RubyMine)

Page 17

PhpStorm先生は

お前の先輩よりも
PHPに詳しい

Page 18

PhpStorm先生は

俺よりもずっと
PHPに詳しい

Page 19

いますぐ生産性を 上げたいなら素直 にIDEを買っておけ

Page 20

IDE

( )
IntelliJ IDEA/PhpStorm

のライセンス料は
人件費よりずっと安い

Page 21

回し者では

ないので
宣伝はこの辺に

Page 22

なぜ2018にIDEと   Emacsを選ぶのか

Why was IDE and Emacs chosen, now in 2018?

#techbeerbash

2018-02-19 FJCT

Tech Beer Bash 2018 vol.1

Page 23

なぜ

Page 24

それが僕には
楽しかったから

(Just for Fun)

Page 25

ほとんど全ての機 能をハックできる
エディタだから

Page 26

ほとんど全て

Page 27

誇張ではない

Page 28

エディタ機能の 多くの部分はLisp
で実装される

Page 29

C言語で実装された関 数もラップできるし、 動的に上書きもできる

Page 30

Lispの言語の 強力さもある

Page 31

http://practical-scheme.net/trans/beating-the-averages-j.html

Page 32

https://cruel.org/freeware/hacker.html

Page 33

職業エンジニアとして の見識を広めるために、 見知らぬ言語の見識を
深めるのは悪くない

Page 34

異質なものに触れて

常用する言語を

相対化することで
得られるものはある

Page 35

1. PHP
どんな言語か

Page 36

PHPを書いたこ とはありますか?

Page 37

いろいろな
コードが書ける

Page 38

テンプレートエンジン

<!DOCTYPE html>

<html><head><title>Hello, PHP!</title></head>
<p>
<?php if (date('H') < 19): ?>
こんにちは

<?php else: ?>

こんばんは

<?php endif; ?>

</p>
<p>今は<?= htmlspecialchars(date('H')) ?>時です</p>

Page 39

CGIっぽいスクリプト

<?php require 'bootstrap.php';

$db = mysqli_connect();
$stmt = mysqli_prepare($db, 'SELECT * FROM books');

mysqli_stmt_execute($stmt);

print '<h1>本の一覧</h1>';

print '<ul>';

foreach ($stmt as $s){
print '<li>'; print $s->name; print ‘</li>';

}
print '</ul>';

Page 40

クラスベースOOP

<?php

namespace MyApp\Controller;
class BooksController extends BaseController{
public function index() {
$books = Books::getAll();
$this->render(compact("books"));
}
}

Page 41

(当然ながら)
Webアプリに多用
される言語

Page 42

なんとなくPerlっぽさ

(変

があり、PHP5では

数に )

$

ちょっとJavaっぽい
見ためのOOPが入ってる

Page 43

むかしながらの おてがるCGIっ ぽいスクリプト

Page 44

フレームワークを 利用した階層構造 アプリケーション

Page 45

どちらもできる
のがPHP

Page 46

Page 47

ちゃんとした
パッケージマネー
ジャがある

Page 48

Page 49

Composer
npm, Bundlerのよ
うなもの

Page 50

動的型検査

Page 51

変数の型は

実行時まで わからない

Page 52

型宣言がある

Page 53

関数の型注釈

(従来から可能)

<?php

/**

* @param float $height

* @param float $top

* @param float $bottom

* @return float

*/

function trapezoid($height, $top, $bottom) {

return (($top + $bottom) / 2) * $height;

}

Page 54

関数の型宣言

(PHP7から可能)

<?php

function trapezoid(float $height,

float $top, float $bottom): float

{

return (($top + $bottom) / 2) * $height;

}

Page 55

JavaScript,Python, Rubyなどと並ぶ動的 プログラミング言語

Page 56

2018年現在おそらく唯一まともに
PHPの型について書いてある紙(雑誌)

Page 57

PHPはオープンクラス

(モン

はないので、クラ

キーパッチ)
スが実行時に拡張されるこ
とは 考えなくてよい

あまり

Page 58

PSR

PHP標準勧告

Page 59

本来のPHPは カオスなCGI

Page 60

フレームワークでオブジェ クトを相互運用できる ようにするための足枷

Page 61

実行環境

Page 62

たいてい本番運用環境 (GNU/Linux,まれにFreeBSD)
と開発環境

(Mac, Windows,
は異なる

デスクトップLinux)

Page 63

2. IDEに何を
期待するか

Page 64

PhpStormはPHPのコンパイラ、
黄色いやつはゆるさない

@tanakahisateru said...

Page 65

https://twitter.com/t_wada/status/819379053530529792

Page 66

精度の高い
静的解析型推論

Page 67

それに裏打ちされた、
入力補完 、定
(メソッド/プロパティ)
義ジャンプ、未定義検出、型エ ラー検出、リファクタリング、

etc, etc...

Page 68

大事なことは

Page 69

自分の誤ちに
すぐに気付ける
こと

Page 70

黄色いやつ

Page 71

黄色いやつ 黄色いやつ

Page 72

Page 73

次にすることを
示してくれること

Page 74

Guzzle(HTTPクライアント)でリクエストする

Page 75

レスポンス得たい
次にどうする?

Page 76

ソースコードを読む ドキュメントを探す?

Page 77

Page 78

動的言語であっても、 強力な静的解析機能で サポートしてくれるの
が理想的なIDE

Page 79

カオスなPHPを

御するために
IDEは強大な助け

Page 80

3. Emacsで 何ができるか

Page 81

Page 82

Page 83

さて

Page 84

いまどき Emacs?

Page 85

Page 86

要約すると

Page 87

Emacsの強さは拡張性

であり、基本機能は
残念ながらそれほど強
くはない

Page 88

いまどきテキストエディ タでIDEに対抗しよう とすることは、竹槍で 戦闘機に対抗しようと
することに等しい

Page 89

端末でSSHでログインし

た先の鯖でも動作する、 といったメリットはある

Page 90

(これは開発よりはインフ ラのサーバオペレーショ ン寄りの需要ではある)

Page 91

逆に「Emacsはターミナ ルで動かすもの」と誤解
があるかもしれない

Page 92

逆に「Emacsはターミナ ルで動かすもの」と誤解
があるかもしれない

Page 93

Page 94

Page 95

ほかのツールを

組み合せることで
匹敵する機能を持たせ
ることはできる

Page 96

しかし

Page 97

現時点で残念ながら

選ぶ・組み合せるの
概念から抜け出せない

Page 98

PhpStormには

埋められない
不満もある

Page 99

PhpStormユーザは

「設定」しかできないが、

Emacsはいつでも
自分で「実装」できる

Page 100

まとめ

Page 101

すぐに強力な開 発環境が欲しい
なら商用IDE

Page 102

環境をハックし て自分を前進さ せながらEmacs

Page 103

両方使ってもいい

Page 104

プロとしての 道具を選ぼう

Page 105

残念ながらEmacs は贔屓目に見て
非力

Page 106

それはそれとして
Emacsをハック するのは楽しい

Page 107

自分といっしょに
強くなれる

Page 108

そんなわけでいろ
いろ作ってきた

Page 109

Page 110

Page 111

Page 112

Page 113

Page 114

tadsan先生の
次回作にご期待
ください

Page 115

お前が

Emacs Lisperに
なるんだよ