Atomへの誘い

# はじめに

いよいよ始まりました、Atom Advent Calendar 2014でございます。

思ったより登録数が少なくてちょっと悲しいのですが、それはみんなまだAtomの魅力が分かってないからだ！

と気を取り直し、初日はAtomの魅力を紹介したいと思います。

# 魅力その1: デフォルトで機能的でカッコイイ

機能性と見た目、エディタを選ぶ上で重要なファクターですね。

Atomは後発ということもあり、既存エディタの良い所を**標準機能**として搭載しています。

注:

* スクショはPackage（Atomの拡張の呼称）無しの状態で撮っています。
* ショートカットはMacのものです。

## クールな見た目

初期状態でこんな感じです。

![default.png](https://qiita-image-store.s3.amazonaws.com/0/7118/6ce0743f-ace5-bdcf-39bb-ea2823c2877c.png)

Packageを入れたりすればこんな感じもなります（後述）。

![customize.png](https://qiita-image-store.s3.amazonaws.com/0/7118/158853e9-56fa-daeb-2ef0-b798236d4487.png)

## Command Palette `Cmd+Shift+p`

VimのUniteとかEmacsのAnythingのようなコマンドの統合インタフェースです。

![command-palette.png](https://qiita-image-store.s3.amazonaws.com/0/7118/db5094f8-a739-4e80-2abd-0ced956a6584.png)

## Fuzzy Finder `Cmd+t`

ファイルツリーからファイル名で絞り込めるアレです。TextMate使ったRailsのScreenCastでよく使われていた記憶があります。

![fuzzy-finder.png](https://qiita-image-store.s3.amazonaws.com/0/7118/37d5890e-365f-5bbc-fb3e-f2520020c65a.png)

## Git Gutter

Gitの差分を視覚化する機能です。

![git-gutter.png](https://qiita-image-store.s3.amazonaws.com/0/7118/ce33d084-68a9-8b89-e514-0f30398857f9.png)

GitHubによる開発なだけあり、さすがのGit親和性。ファイルツリーも色が変わります。

## Markdown Preview

こちらもGitHubフレンドリーな機能。GitHub Flavored Markdownのリアルタイムプレビューです。

![gfmd-preview.png](https://qiita-image-store.s3.amazonaws.com/0/7118/c810a12c-b501-4334-9bb5-7d718456e018.png)

## 言語ハイライト変更 `Ctrl+Shift+l`

基本自動認識で済みますが、カジュアルに変更も可能です。

![lang.png](https://qiita-image-store.s3.amazonaws.com/0/7118/223674ba-6d04-8c12-d057-27fd4726536c.png)

## ファイル内検索・置換 `Cmd+f` プロジェクト横断検索・置換 `Cmd+Shift+f`

検索と置換は統合されています。大文字小文字、正規表現など条件指定も色々指定可能です。

ファイル内検索・置換:

![find.png](https://qiita-image-store.s3.amazonaws.com/0/7118/06f1e521-00dd-b6f6-7b31-beb332125637.png)

プロジェクト横断検索・置換:

![find-proj.png](https://qiita-image-store.s3.amazonaws.com/0/7118/b33b4306-2f5e-6c9e-ccb4-14caed7e24b4.png)

## Pane（ウィンドウ）分割 `Cmd+k → 矢印`

もちろん出来ます。

![split.png](https://qiita-image-store.s3.amazonaws.com/0/7118/bb668daf-6e69-4d0b-286f-c51deb7e1544.png)

Pane間の移動は`Cmd+k → Cmd+n`です。

（ショートカットの由来は謎です…）

## Dev Tools `Alt+Cmd+i`

AtomはUI描画にWebKitを採用しており、おなじみのDeveloper Toolsが使えます。

![devtool.png](https://qiita-image-store.s3.amazonaws.com/0/7118/5ed44c15-8f71-52f2-649f-7500ced9b18d.png)

要素の追加・削除・スタイル変更なども可能です。

初期状態に戻したい場合は window:reload `Ctrl+Alt+Cmd+l` しましょう。

## その他

* 行コメント・コメントアウト `Cmd+/`
* インデント `Cmd+]` デインデント  `Cmd+[`
* Undo `Cmd+z` Redo `Cmd+Shift+z`
* タブ移動 `Cmd+Shift+[` `Cmd+Shift+]`
* オートコンプリート `Ctrl+Space`

検索ボックスなど、大抵のものは`esc`で閉じれるようになっているので、
BetterTouchToolなどで`Ctrl+[`を`esc`にマッピングしておくのもオススメです。

# 魅力その2: ビジュアルな拡張性

拡張機能 "Package" は[Web上で](https://atom.io/packages)探すことが出来ます。

HTML5でUIが構築できるので、ビジュアル的に優れた拡張が多いのが、Atomの特徴だと思います。

ここではメジャー所のPackage紹介します。

## [file-icons](https://atom.io/packages/file-icons)

ファイルツリーのアイコンを豊かにしてくれるPackage。

![file-icons.png](https://qiita-image-store.s3.amazonaws.com/0/7118/6e156014-e424-68c8-3033-006a08aeb543.png)

## [minimap](https://atom.io/packages/minimap)

SublimeTextで一世を風靡したアレです。

![minimap.png](https://qiita-image-store.s3.amazonaws.com/0/7118/89880341-9b69-0c2d-3c5e-b1cad199803f.png)

## [atom-color-highlight](https://atom.io/packages/atom-color-highlight)

色表現を自動認識してカラーリングしてくれるPackage。

![color-highlight.png](https://qiita-image-store.s3.amazonaws.com/0/7118/e4a8e614-acfc-8064-75b6-99b9785198cd.png)

## [linter](https://atom.io/packages/linter)

こちらはLintを実装するための汎用機能を提供するPackageです。

![linter.png](https://qiita-image-store.s3.amazonaws.com/0/7118/2e28d117-7e72-c9db-2ebb-fbaef28a247d.png)

Lint機能を使うには、これとは別にLintツールごとに実装されたPackageを入れる必要があります。

現時点でJavaScript、CoffeeScript、Typescript、Dart、Ruby/Rails、PHP、Python、Java、CSS/SASS/SCSS/LESS、XML、Bash、Scala、C/C++、Lua、Clojure、Puppet、Yaml、Haskell、HTML/Bootstrap、Squirrel、CoDScript、harbour、Rust、Elixir、Erlang、ActionScript/Flash/Flex/AIRの実装があるようです。

Perlなんて言語はこの世に存在しないことになっているようなので[自分で書きました](https://atom.io/packages/linter-perl)。

## [autocomplete-plus](https://atom.io/packages/autocomplete-plus)

オートコンプリート機能は標準で入っていますが、こちらをいれればタイプ時に自動に候補を出すことが出来るようになります。また、[autocomplete-snippets](https://atom.io/packages/autocomplete-snippets)や[autocomplete-paths](https://atom.io/packages/autocomplete-paths)のように、autocomplete-plus向けのPackageも数多く公開されています。

![autocomplete.png](https://qiita-image-store.s3.amazonaws.com/0/7118/acd485b6-e6bd-327f-dd92-420e321f904f.png)

## その他のPackage

* [merge-conflicts](https://atom.io/packages/merge-conflicts)
  * Gitのコンフリクトを気持ちよく解消するための拡張。
* [script](https://atom.io/packages/script)
  * Vimのquickrun的な拡張。
* [tag](https://atom.io/packages/tag)
  * `Alt+Cmd+.`や"</"入力時に自動で閉じタグを挿入してくれるPackage。類似のPackageは幾つかありますが、個人的には一番これがしっくりきました（そんなにスター多くないのですが）。
* [git-plus](https://atom.io/packages/git-plus)
  * Atom上でGitの操作を行えるようにするvim-fugitive的Packageです。非常に人気があるので入れてはみたのですが、gitは基本的にCUIで操作する質なので、あまり使ってません。
* [todo-show](https://atom.io/packages/todo-show)
  * ソース内の"TODO:"とかを列挙してくれるPackage。プロジェクトが混迷を極めてきた時に使うと気持よく絶望できます。

他にもポモドーロ法のPackageなどなど玉石混交日々量産されています。

# 魅力その3: Package/Theme管理, apm, atom.io

AtomではPreference（Setting View）からPackage/Themeを探してインストールすることが出来ますが、これとは別にapmという強力なPackage管理ツールが用意されています（AtomではPackageとThemeの取り扱いはほぼ同じです）。

apmは、その名の通りnpmインスパイアのCUIツールで、Packageに関するあらゆる操作を行うことが出来ます。VimやEmacsのようにCUI上で動くわけではありませんが、CUIとの連携を大切にしている所は評価ポイントですね。CUIは自動化とも相性が良いので、色々な使い道がありそうです。

（ちなみにmateやsubl的なatomコマンドもあります。上記「その1」でのスクショは`atom --safe`で起動して撮ったものです。）

## apmで出来る事

代表的なものを挙げておきます。

* Package管理
  * 検索 `serach`
  * インストール `install`
  * アンインストール `uninstall`
  * アップデート `upgrade`
  * スター `star` `stars` `starred`
      * スターはクラウド連携のお気に入り機能（詳細後述）
* Package開発
  * 骨格の自動生成 `init`
  * 公開・更新 `publish`

## atom.ioとスター機能

Package管理という観点では、Atom公式サイトatom.ioの存在も重要です。

atom.ioは、単なるアプリダウンロードのためのランディングページではなく、GitHubアカウントと連携するWebアプリケーションになっており、PackageやThemeの検索・公開のためのエコシステムが提供されています。

その昔はPackage管理機構が無かったので、別途Package管理用Packageを入れたりしていたのですが、[6月頃にStarsというPackage管理機能が提供されたことにより](http://blog.atom.io/2014/06/09/stars.html)、好きなPackageにスターを付けておけばapmでサクッとローカルのAtomに同期できるようになりました。

![Packages.png](https://qiita-image-store.s3.amazonaws.com/0/7118/b853ff3f-ed4f-af1c-49f5-82a7d70bd3dd.png)

このスターはatom.ioとapmどちらでも、付けたり一覧を見たりすることが出来ます。パッケージの管理・同期の問題はあらゆるテキストエディタで問題となる部分なので、クラウドで解決してくれると助かりますね。

# 魅力その4: オープンソース・無料、GitHub主導、クロスプラットフォーム

エディタの機能ではありませんが、外的側面も重要です。

## オープンソースで無料、いわゆる「自由なソフトウェア」

クローズドにはクローズドの、有料には有料の良さはありますが、やはりオープンソースで無料というのが、ユーザにとって一番気軽で且つコミュニティによりPDCAが回る、優れたスタイルだと思ってます。

## GitHubという業界的・資本的・エンジニアリング的に強力な開発母体

流行り廃れの流れの早いソフトウェア業界ですが、GitHub主導となると安心感があります。

## 安心のクロスプラットフォーム

普段Macで開発してるんだけど、諸事情によりWindowsで開発せざるを得なくなったエディタどうしよ～という時も安心のクロスプラットフォームです。

# おわりに

ということで、途中から文字が増えてきたり最後のほう力尽きてたりしておりますが、長々とAtomの魅力を紹介してまいりました。

他にも、WebKit+V8+Node.js+CoffeeScriptという組み合わせとか[Reactの採用](http://blog.atom.io/2014/07/02/moving-atom-to-react.html)とか技術的にも注目すべきソフトウェアであり、GitHubパワーをフルに活かして非常にコミットしやすいエディタであり、などなど魅力は沢山ありますが、今日はこれぐらいにしておきます。

Vim/Emacsに飽きてきた方、TextMate勢い無くなってきたしSublimeTextに乗り換えよっかなでも有料かーという方は、一度トライする価値があるエディタだと思います。

以上、Atomへの誘いでした。

疑問質問ありましたら、下のコメントやブコメにてお願いします。