Magento2 は Magento1.x の後継バージョンですが、Magento としての基本思想はそのままに、全く別と言っていいほど実装面では異なるアプリケーションになっています。
このエントリでは Magento1.x と Magento2 の違いについて解説したいと思います。

1. ディレクトリやファイルの構成が違う

Magento1.x と Magento2 ではディレクトリ構成が異なっています。
Magento1.x にあった一部のディレクトリやファイルが変更・廃止になっているほか、Magento2 特有の新しいディレクトリが追加されています。

コードプールの廃止

Magento1.x には「コードプール」という概念がありました。
これは「core」「community」「local」という3つの領域を設けることで、Magento 公式のコードとサードパーティ製のコード、そして自社カスタマイズコードを分離するという役割を担っていました。

このコードプールは Magento2 では廃止され、存在しなくなりました。
そのため、Magento2 では Magento1.x で簡便なカスタマイズ方法として多用されてきた、「core や community のコードを local にコピーしてカスタマイズする」という方法ができなくなりました。

local.xml などの設定XMLファイルの廃止

Magento2 ではデータベースへの接続情報などを記述するXMLファイルは廃止され、config.php と env.php の2つのPHPファイルに置き換えられました。
XMLファイルは使いやすいファイル形式ですが、PHPが理解できる形に読み込んで変換する必要がありました。
Magento1.x ではキャッシュの形で変換結果を保持していましたが、Magento2 ではPHPファイルに変わったことで変換する処理が省かれました。

shell ディレクトリの廃止と magento コマンドの新設

Magento1.x にはshellディレクトリ下に幾つかのコマンドが用意されていました。
Magento2 ではPHPフレームワーク・symfony2 によく似たコマンドが多数用意されています。
Magento2 ではこの新たに用意された「magento」コマンドを使用することが多く、重要な位置を占めています。

skin・media ディレクトリの pub ディレクトリ配下への移動

画像や CSS、JavaScript などの静的なファイルを配置するディレクトリは Magento1.x では skin と media に分かれていました。
これらは Magento2 では統合されて1つの pub ディレクトリの中に置かれるようになりました。

media ディレクトリは pub/media となり、skinディレクトリは pub/static ディレクトリに改められました。

setupディレクトリの新設

Magento1.xでは独立したインストーラーがなく、install.php がコマンドとしてのインストーラーの役割を果たしていました。
Magento2では setup ディレクトリが新たに設けられ、インストーラーとして独立することになりました。

vendorディレクトリの新設とcomposerの標準導入

Magento1.x ではパッケージ管理ツールとして、pear をベースにしたパッケージ管理が行われてきました。
Magento2 では全面的に composer がパッケージ管理ツールとして採用された事によって、vendor ディレクトリが新設されました。

2. 動作環境が違う

当然 Magento2 のほうが新しいバージョンであるぶん、PHPやMySQLの要求バージョンが新しくなっています。
古いOSで Magento2 を使いたい場合には注意が必要です。

さらに、アプリケーションとして Magento2 のほうが複雑なため、サーバーのCPUやメモリは Magento1.x よりもハイスペックなものを用意しておいたほうが良いでしょう。

3. データベースに互換性がない

おなじ Magento なのだから1.xと2のデータベースはそのまま使えるだろう」と考えられる方も多いかと思います。
しかし残念なことに、Magento1.x と Magento2 のデータベースには互換性がありません。
概ね似たようなテーブルの構成をしているのですが、一部のテーブルに入っているデータに違いがあるほか、Magento2 で新設・廃止されたテーブルがあるため、そのままでは使えません。

Magento1.x のデータベースに記録されているデータを Magento2 で使いたい場合は Magento が公式に開発・提供している「Data Migration Tool」を使う必要があります。
(もしくは独自で開発してもよいですが、とても大変です)

4. エクステンションにも互換性がない

Magento1.x と Magento2 の互換性がない部分は、データベースだけではありません。
Magentoを拡張するために広く利用されているエクステンションにも互換性がありません。
(厳密にはデザインテーマにも互換性がありません)

Magento1.x のエクステンションは、使用するファイルが幾つかの離れた位置にあるディレクトリに分かれていました。
エクステンションを開発する際にはどうにもこのディレクトリ構成がややこしく、インストール・アンインストールする際も手間でした。
(特に商用エクステンションで顕著でした)

Magento2 ではこれが全面的に改められ、エクステンションは1つのディレクトリにまとめられることになりました。
それに伴い、エクステンションディレクトリ内の構成も改められ、新しくなりました。

5. 運用面の作法が違う

Magento2 を初めて触る人が戸惑う点はおそらくこの「運用面の作法」ではないでしょうか?

Magento2 は Magento1.x とも運用方法が異なり、所定のタイミングで所定のコマンドを実行する必要があり、それをうっかり忘れるとトラブルを引き起こしてしまいます。

動作モードの問題

Magento1.x にも動作モードは一応ありました。といっても多少開発がしやすくなる程度の違いしかなく、使わなくてもどうにかなるものでした。

ところが Magento2 には以下の3つの動作モードがあり、明確に使い分けをする必要があります。

 defaultdeveloperproduction
エラー出力 なし あり なし
コード自動生成 あり あり なし
クラスの定義 リフレクションベース リフレクションベース 事前コンパイル
静的ファイルの配信 あり あり 事前配信
ページキャッシュデバッグ情報 なし あり なし
設定ファイルの検証 なし あり なし
テーマの自動登録 あり あり なし

インストールしたままの状態では動作モードは「default」になっています。
サイトの構築をする間は「developer」にしておき、実運用環境は「production」にするのがセオリーになるでしょう。 

var ディレクトリ下の自動生成ファイルの存在

動作モードに関連してきますが、Magento2 では var ディレクトリ下に

  • di
  • generation

というディレクトリが新たに追加されています。
これらは自動生成されたコードやクラスの定義を格納しているディレクトリです。
production モードの場合は magento コマンドを用いて実行しなければならず、これらの情報が更新されない場合は、エクステンションやカスタマイズコードをサーバーにアップロードしても正しく反映されないケースがありえます。

静的ファイルの配置の手順

これも動作モードと一部関連します。
production モードの場合は pub ディレクトリ下の静的ファイルは事前にコマンドで実行した内容のみが配信されます。
development と default の場合は都度都度ファイルがエクステンションディレクトリからコピーされて配信されますが、時折静的ファイルのクリアをしないと更新したファイルの内容が正しく反映されないことがあります。

まとめ: Magento2 は違うアプリケーション

さて、ざっと Magento2 の Magento1.x との違いを説明してきました。
Magento2 は Magento1.x よりも複雑で厳格な設計・定義・実装に基づくアプリケーションです。正直全く違うシロモノです。

Magento の単なる新しいバージョン」という感覚で取り組むと、少し大変かもしれません。