Xcode使いがEclipseにぶちまける10の不満 | HMDT Blog

Xcode使いがEclipseにぶちまける10の不満


最近Android開発をやらされてます。「やらされている」というのは、特定の案件のためというより、時流としてもういい加減無視できないので会社の方針としてやることにした、でも非常に嫌々な気分満載、というニュアンスを含んでいます。

私も大人になりましたし、仕事ですから、Android端末を手にとっても、それを7階のオフィスから投げ捨てるようなことはなくなりました。ニッコリ笑って操作しますが、左上に戻るボタンが見つからない瞬間に、床に叩き付けてしまいます。ハードウェアボタンかよ、くそっ。あーもう正直にいいますが、嫌いっすよAndroid。iPhoneラブですよ。

当方生粋のMacユーザなので、ものの見方にバイアスがかかっていることは自覚しています。いまのAppleからは想像もできませんが、Macを昔から使っている人は虐げられていた期間が長いので、ひねくれてねじまがっているんですよ。その世界観では、悪の帝国Googleに立ち向かうジェダイの騎士Appleです。iPhoneを携えてAndroidを駆逐しなくては!という義憤にかられます。ですが、最近のAppleのビッグプレイヤーぶりを見ると、隔世の感というか、自分がジジイの繰り言になっているのがよく分かります。Appleはもう俺たちなんか必要としていないんだ。しゃーねーなー、Android開発もやるか。ちなみに、Microsoftはすでに滅んだ過去の帝国です。

で、Android開発をやると、最初に立ちはだかる壁がEclipseですよ。開発環境。当方OS XおよびiOS開発を生業としていますので、開発環境はXcodeこれ一本。前身であるProject Builderから使い続けていますよ。毎日12時間は使い続けているXcodeは、もう自分にとって体の一部です。

そんな私がEclipseを使いました。もうね、言っちゃいますけどね、ホントの気持ち言っちゃいますけどね、最悪ですよこれ。起動からクラッシュするまで、最悪の気分ですよ。まずアイコン、ださっ。起動、遅っ。画面表示、無駄っ。ツールバー、汚っ。エディタ、重っ。プロジェクト管理、訳分からん。ガベージコレクションの最中にクラッシュ、バカじゃねーの。

いや、知ってます。知っているんです。Eclipseを使い続けてきた人がXcodeを使ったら、これとまったく同じ感想を抱くことを。EmacsやVisual Studioを使っている人がXcodeに抱く感想も、同じことを。みんな、自分が慣れ親しんでいる環境が一番なんです。「使いやすさ」に対する絶対的な尺度はないんです。「慣れ」が最も大事なんです。開発者が、他の環境にあわせるのは、並大抵のことではないんです。

あれですね。開発環境を移すということは、ある意味海外に移住することに似ていますね。言葉が違う。習慣が違う。文化が違う。何をやるにもストレスフルです。でもそれは、別の視点を獲得することでもあります。違いを認め、新たな考え方を習得することで、より豊かな生活を送れるようになります。

よーし。Eclipseを使うという事は、異文化への挑戦である。ここはひとつ、腹を据えて触ってやろうじゃないか!………(触っている)………(触っている)………(触っている)。分からーーーん!ぜんぜん思い通りに動かないーーー!海外で迷子になったけど、看板も読めないし、誰にも話しかけられない気分だーーー!

なぜこんなにイライラするのか?それは「この操作はXcodeだったらこうするのに、Eclipseだとやり方が分かんない、または結果が期待と違う」からです。だから、やり方が分かればいいんだけど、マニュアルもドキュメントも量だけ膨大で、そのくせ大したこと書いていなくて、もう何をどう探せばいいのか分からんちんです。

そこで!Eclipseの操作で何が分からないのか、または気に食わないのか、まとめてみました。Xcodeをずっと使っていた人が、Eclipseのここでつまずいているよ、というのをまとめてみました。でもこれって、とても基本的な操作ばっかりなので、たぶんEclipseでもできると思います。ってか、できてくれよ。なので、これを読んで解決方法が分かる人がいたら、「こうすればいいんだよ、愚か者め」と教えてください。

1. メソッドの一覧表示および絞り込み検索

エディタでソースコードを編集するとき、そのクラスに含まれるメソッドの一覧を素早く表示、かつ絞り込み検索もしたい。

Xcode

エディタの上部にあるポップアップメニューをクリックすることで表示できます。

xcode_popup1

表示順は、ソースコードに書かれた順です。ポップアップを表示した状態でキーボードから文字を入力すると、絞り込み検索ができます。

xcode_popup2

絞り込みは、前方一致ではなく部分一致です。だから、メソッドの名前の一部を覚えていればオッケー。つまり「あのメソッドの編集したいな、えーっと名前なんだっけ、viewが含まれていたっけ」といううろ覚えな感じでも、素早く検索および移動ができます。

また、#pragma markを使う事で、メニューの中に区切り線や特別な文字を追加できます。上の図における”View Life cycle”とかですね。これにより、自前でメソッドをカテゴリに分けて管理できます。

Eclipse

Eclipseでのメソッド一覧表示は、これかな?Outlineの表示。

eclipse_outline0

一覧表示はありました。メソッドだけじゃなくて、スタティック変数なんかも出てくるところはXcodeより機能は上ですね。絞り込み検索を行うのは、Filtersでしょうか?

eclipse_filters

Fitersの画面で、キャラクターマッチングが行えます。でもこれ、「パターンにマッチした名前を隠す」なのね。なんで?マッチしたものを表示するなら分かるけど、なんで隠すの?どんなシチュエーションでこれ有用なの?結局、絞り込み検索はできないの?

2. 補完入力

クラス名、メソッド名やキーワードを補完入力したい。私は、補完入力肯定派です。

Xcode

あるメソッドの中で、次のコードを入力してみます。

self = [super initWithNibName:nibName bundle:nil];

まず、’s’を入力しまう。すると、’self’を補完するための候補がポップアップで表示されます。selfが出てこないときは’se’まで入力します。

xcode_comp5

そこでselfを選択して、タブキー(またはエンター)をヒット。文字列が補完されるので、続いて’ = [su’までを入力します。すると’super’を補完するための候補が表示されます。

xcode_comp1

タブキーをヒット。文字列が補完されます。続いて、’ i’を入力。iで始まるメソッドの候補が表示さます。

xcode_comp2

‘in’まで入力すると、絞り込まれる。ここでわざと、’initWithCoder:’を選択。タブキーを押します。

間違えたので、’initWith’まで削除してエスケープキーを押します。または、’initWit’まで削除して’h’を入力します。すると再び、候補が表示されます。

xcode_comp3

今度はinitWithNibName:bundle:を選択。最後に引数を入力して完了。このときローカル変数であるnibNameや、defineであるnilも補完されます。

まとめると、selfやsuperといったキーワードが補完されます。メソッド名が補完されます。一度削除して、再度入力するときも補完されます。あと、インスタンス変数やローカル変数も補完されます。

Eclipse

あるメソッドの中で、次のコードを入力してみます。

super.onCreate(savedInstanceState);

まず、’s’を入力します。何も補完されません。なんで?キーワードは補完されないの?どっかで設定する必要があるの?しょうがないので、’super’まで入力します。そして’.’を入力します。メソッド名を補完するための候補がポップアップで表示されます。

eclipse_comp

ここで’onCreate()を選択してエンターを押します。すると、’onCreate(savedInstanceState);’まで入力されます。これで終わり。ふむ、素晴らしい。

でも、ちょっと変更したいと思って、メソッド名を’onCrea’まで削除します。このとき、どうやっても補完ポップアップが表示されません。なんで?エスケープキーを押すとかして、この状態から候補を表示できないの?しょうがないからメソッド名を全部削除して、再び’.’を入力すると候補が表示されます。つまり、一度間違えると全部消さないといけないのか。

また、引数の’savedInstanceState’は自動入力されましたが、これも一度削除して、もう一度’s’と入力しても補完候補は表示されません。なんで?ローカル変数は補完の候補にならないの?

まとめると、superというキーワードが補完されません。クラスの後にドットを入力すると補完候補が表示されますが、候補を一度決定すると途中から補完させる事はできません(もう一度ドットの入力からやりなおす)。インスタンス変数やローカル変数は補完されません。

Xcodeは、クラス名、メソッド名、インスタンス変数名は、宣言のときにただ一度書くだけで、あとはフルに入力する事は無いです。だって補完されるから。したがって、Xcodeではシンタックスエラーはありえない。だって補完されるから。一度入力したメソッドを変更したいときも、一部を削除するだけで、またすぐ補完候補が表示されます。

Eclipseも補完はされるんだけど、一度間違えると修正するには全部消してもう一度ドットの入力からやり直さないといけない。これがとってもストレス。

3. APIドキュメント

各種フレームワークのAPIドキュメントを表示したい。そして、クラス名やメソッド名で検索したい。

Xcode

Helpメニューから「Documentation and API Reference」を選択します。専用のツールが表示されます。検索バーにクラス名、メソッド名、変数名などを入力します。インクリメンタルサーチされます。

xcode_apiref

選択すればその項目が表示されます。こんだけ。疑問の余地無く単純です。

Eclipse

Eclipseにはドキュメントをブラウズするためのツールが、、、ない!?ないの?ないこたないと思うんだけど、見つからないよ。

しょうがないので、Webブラウザを使います。Webブラウザを起動して、http://developer.android.com/reference/を開きます。パッケージ一覧が出てきます。右上の検索フィールドから、クラス名が検索できます。インクリメートサーチできます。

eclipse_apiref

クラス名は検索できるんだけど、メソッド名は?メソッド名での検索の仕方が分からない。できないの!?そんなバカな。ないわけないよね?そんなオブジェクト指向開発環境あるはずがない。きっと秘密の方法があるんだよね!?

4. シミュレータ

テストのために、Mac上で動作させたい。シミュレータまたはエミュレータを使いたい。

Xcode

動作するスキームとして、iOSシミュレータを選択します。

xcode_scheme

ビルドして実行します。シミュレータが起動して実行されます。以上、おしまい。

Eclipse

Android Virtual Device Managerから、Android Virtual Deviceを作成します。選択して実行します。エミュレータ起動画面が表示されるので待ちます。

eclipse_emu

待ちます。待ちます。待ちます。5分待っても画面が変わらないので、強制終了します。以上、おしまい。

なんかネットで検索すると、Intel製?のエミュレータがあるらしくそれを使えという事らしいけど、純正でこんなにも使い物にならないってのは、どうよ。ダメすぎじゃん。

iOSはシミュレータ。Androidはエミュレータ。つまり、iOSはOSおよびアプリをx86にネイティブコンパイルしたものを使います。だから速い。AndroidはARMチップをx86上でエミュレートして走らせます。そりゃ遅いに決まってます。純正でまともな速度で動作するエミュレータ(もしくはシミュレータ)作ってよ。

5. Subversionとの統合

開発環境と、各種SCMを連携させたい。うちの会社はSubversion使っているんで、Subversionが動けばいいです。

Xcode

新規プロジェクトを作成して、Subversionに入れる。その状態でプロジェクトを開く。これだけで連携します。リポジトリアドレスの入力などは必要なし。プロジェクトにファイルを追加すると、Subversionにaddされますし、削除するとdeleteされます。編集したら、commitします。

Eclipse

EclipseでのSubversion統合は、できるんだよね、きっと?ちゃんと調べれば、どこかにやり方が書いてあるんだよね?ただXcodeみたいに設定なしでできるというわけではないのかな?

6. エディタの2画面表示

Xcode

Xcodeでは、エディタを2つ並べて連携させる事ができます。このとき、右側のエディタはアシスタントと呼ばれます。

xcode_assistant

アシスタントにはざまざまな表示が可能ですが、カウンターパートと呼ばれるものがあります。これを使うと、左側に.mを表示するとき、右側に自動的に.hを表示させることができます。その逆で、.hを選択したときに.mを表示する事も可能。

また、左側で.xibや.storyboardを表示して、右側に対応するコントローラクラスを表示する事も可能。インタフェースをデザインしながら、対応するソースコードを実装できます。

Eclipse

Javaはヘッダファイルがないから、この機能への要求が低いのは分かります。でも、layoutを編集しながらActivityのコードをいじれたら、便利だと思うんだけどな。

7. インスペクタ

Xcode

Xcodeの、ユーザインタフェース編集のためのインスペクタ画面です。

xcode_inspector

Eclipse

Eclipseの、ユーザインタフェース編集のためのプロパティ画面です。

eclipse_property

なめとんのか。手抜きだ手抜き。

8. 操作をアニメーションで確認する

XcodeもEclipseも、基本的に一画面をタイル分割して各種情報を表示しています。そのタイルを隠したり表示したりできるんだけど、Xcodeはそのときにアニメーションが伴います。Eclipseは伴わない。正直Eclipseだと、何がどこに移動したのか分かりません。操作をした直後は完全に動揺し、そのまま30秒画面を凝視した後で、何がどこに動いたのかが理解できます。これがアニメーションがあれば、その瞬間に分かるものです。

アニメーションはただの派手な演出ではありません。ユーザを導くガイドラインです。Eclipseは、それがまったくないです。

9. スタックトレースを見やすく表示する

Xcode

Xcodeのスタックトレースです。

xcode_stack_trace

Eclipseのスタックトレースです。

eclipse_stack_trace

ぐは。ログかよ!

これは悪意のある比較で、Eclipseにもちゃんとリストで表示するスタックトレースは見つけました。

eclipse_stack_trace1

でも、ログで吐くスタックトレース(しかも改行されてリストで表示)は、衝撃だったな。これしかなかったらどうしよう、と思った。

10. ワークスペースを複数開く

Xcodeでは、開発は「プロジェクト」が基本。プロジェクトを複数まとめた「ワークスペース」も作成できます。ワークスペースは複数作成し、同時に開く事ができます。

Eclipseでは、開発は「ワークスペース」が基本。ワークスペースで複数の「プロジェクト」をまとめます。ワークスペースは複数作成できますが、同時に開くことはできません。なんでじゃ!しかもワークスペースを切り替えるときに、一度Eclipseが終了します。なんでじゃ!

これたぶん、LinuxやWindowsでは別プロセスとしてEclipseがもう一つ立ち上がるんだと予想。OS Xだと、同一アプリを複数プロセスで起動することができないので、こうなってしまっているんじゃないかな。

道具は思考を規定する

こうやって不満に思ったところを書き出してみましたが、これで分かったのは、私の考え方は完全にXcodeに支配されているということです。もうちょっと穏当な言い方をすれば、開発スタイルがXcodeに合わせて最適化されている、ってことでしょうか。もし始めからEclipseだけを使っていれば、それに合わせた思考体系になっていて、ここで挙がった不満は生じない、そもそもそういう欲求が起きないのでしょう。

そしてそれは、その道具を使って開発されるアプリにも影響を及ぼさないはずがないです。つまり、Xcodeの思考体系に慣れたプログラマと、Eclipseの思考体系に慣れたプログラマは、どうしたってそのスタイルに引きずられながらアプリを開発します。これは、ボタンのちょっとした挙動や、設定画面に必要な項目などで、ちょっとした、ほんとにちょっとした差として表れるでしょう。

それらが積み上がっていった結果、どちらがより良いアプリになるか?その辺りを意識しながら、Eclipseを使い続けてみようと思います。

 

    • れい
    • 2014年 5月8日

    補完はショートカットあります。XCodeより文脈を読んでくれます。
    (XCodeはNSSまで入力して頻度の高いNSStringを第一にしてくれないのが不満)
    http://d.hatena.ne.jp/xyk/20110605/1307279068
    エミュレータはスナップショットを活用してください
    http://www.auraline.co.jp/tech-lab/?p=211
    Eclipseはプラグインで拡張するのが基本なので
    SubversionならSubversiveやSubclipseなどを入れます。
    GitはEGitとかですがこれは標準で入っていたような。

    リファクタリング機能とかはEclipseのほうが強力だと思います。
    クイックフィックスはXCodeに欲しい機能ですね。

    • 通りすがりの名無し
    • 2014年 5月8日

    eclipseの候補表示ですが、
    Winでは:Ctrl + Space
    Macでは:Command + Space
    で表示できると思います

    Macの場合Spotlightとショートカットキーが被ってしまってるんで、
    環境設定から割り振りなおすといいと思いますよ

    • gungnir_odin
    • 2014年 5月8日

    純正のエミュレータは使い物にならないので、Genymotionをおススメします。

    手前味噌ですが
    http://d.hatena.ne.jp/gungnir_odin/20140411/1397230033

    • sis.yoshiday
    • 2014年 5月8日

    補完系の機能については、EclipseよりはAndroid Studio (IntelliJ IDEA)のほうがXcodeに近い挙動をすると思います。(Xcode使ったこと無いけど)

    あと、今後ビルドシステムが本格的にgradleベースになるだろうし
    著名なライブラリは既にgradle向けに提供されてきているので、
    これから初めるならAndroid Studioをおすすめしますね。

    • ken yasue
    • 2014年 5月8日

    実機のテストが一番ですが、Genymotionはいいですよ。iPhoneシミュレーターと同じ感覚で使えます。

    • あぼん
    • 2014年 5月8日

    どんな開発ツール、言語、フレームワークでも使いこなしてみせるぜってぐらいの意気込みのある人じゃないと一緒に仕事したくない

    • 乳牛
    • 2014年 5月8日

    subversion連携はsubversiveプラグインを入れるとできますよ

    • 火瞬
    • 2014年 8月25日

    補完に関して何人かの方が仰ってるようにショートカットで補完させる事が出来ます。
    また、記事内で仰ってるようにeclipseでは.(ドット)を含む一部キーのみ補完トリガーにデフォルトでは設定されていますが、変更する事でXcodeの用にどのキーでも補完が行われるようになります。
    http://ser1zw.hatenablog.com/entry/20110130/1296393620

    画面分割はドラッグ&ドロップで画面端に当てる事で可能です。
    http://blog.syuhari.jp/archives/395

    • ああああ
    • 2016年 12月27日

    幼稚すぎ。

    eclipse使わなきゃいいじゃん。あんなの産廃なんだし。

  1. 2014年 5月8日
    トラックバック先 :hd 4.0