18.04が正式にリリースされてから1ヶ月が経ちました。18.04からは、標準のデスクトップ環境がUnityからgnome-shellに変わりました。このgnome-shell、あまりいい噂を聞きません。Developer実は私も、もう少しメモリ使用量を削減してほしいなーとか思っているのですが、それでもUnityと比較するなら、拡張性に優れたgnome-shellのほうが便利だと感じています。gnome-shellとはデスクトップ環境が変わると言っても、初期の状態では見た目はUbuntu16.04の頃とほとんど変わりません。個人的に大きな変更点だと思ったのは次の2点です。16.04と異なり、またそれらを自分好みにカスタマイズできるgnome-shellの拡張機能を簡単にインストールできる!拡張機能のインストールの仕方は驚くほど簡単です。好みのブラウザの拡張機能をインストールした後は、拡張機能一覧のページで好きな機能を選んでボタンをクリックするだけ!ちなみに自分は合計で7個の拡張機能を入れています。多く入れすぎるとデスクトップの立ち上がりに時間がかかるので程々に。↓自分のデスクトップ環境はこんな感じになりました。16.04の頃とはまるで別物のようです。あ、デスクトップに黒文字で表示されている時計は、gnome-shellではなくconkyという独立型デスクトップウィジェットエンジンを使用しています。暇ができたらこれについての記事も書く予定です。gnome-shellでは自分の好きな拡張機能を入れることができるので、個々人の好みに合わせてデスクトップをカスタマイズすることができます。ここにいくつかのカスタマイズ例を紹介しておきます。(Shell)拡張機能の自作に踏み切ったワケgnome-shellの拡張機能一覧のページには結構な数の拡張機能が見つかるのですが、実はそのほとんどが現行のgnome-shellのバージョンに対応していません。18.04で動く拡張機能の数というのは限られてきます。そこで、より自分のニーズに合ったカスタマイズを作成するには拡張機能を自作しなければならなくなるわけですが、実際に自作する方法を調べても、全然記事がヒットしません。自作するための導入部分に触れている記事はいくつか合ったのですが、実際にオリジナルの拡張機能を自作して、それを公開するまでのプロセスをしっかりと示している記事は残念ながら一つも見当たりませんでした。そこでこの記事では、gnome-shellがインストール済みの状態を仮定し、gnome-shellの拡張機能を自作するまでの一連の過程を紹介したいと思います。今回作るもの今回は、Dropboxの同期状態をトップバーに表示するような拡張機能を自作したいと思います。1)という感じで使います。実はこのソフトをインストールするとDropboxの同期状態がトップバーに表示されるのですが、なぜか表示されないときが合ったり、表示されても表示が間違っていたりなど、やや不具合があるようです。そこで、正しい状態を表示するために、gnome-shellの拡張機能を自作します。準備まずは、gnome-shellに付属しているツールを使って、拡張機能の雛形を作ります。[Dropbox@dynabook-T55]:ここで、拡張機能の基本となる設定を行います。各質問項目の内容は以下のとおりです。拡張機能の識別子Uuidの値は基本的に自由ですが、後のデバッグのためにも、「<拡張機能の名前>@<メールアドレスの@を.に変えたもの>」としておくのが無難です。設定が終わると、$XDG_DATA_HOME/gnome-shell/extensionsというディレクトリ内に、先程のUuidで指定した名前のディレクトリが生成されます。stylesheet.css拡張子を見ると、.jsや.cssなど、いずれもwebページでよく見かけるような拡張子が並んでいますね。gnome-shellは、webページを編集するのと同じようなイメージで拡張機能を作れてしまいます。これはWeb系のエンジニアからすればとても嬉しいでしょうし、またJavaScriptは様々な場面で利用されているため、多くの人にとってもゼロから学ぶよりはかなりのストレスを軽減できるのではないでしょうか。デバッグ環境の立ち上げ拡張機能の開発を行う際には、常にデバッグ環境を立ち上げてエラーの内容を表示するようにしておくと良いでしょう。今の状態からもう一つ端末を開くか、gnome-terminalの場合はCtrl+Shift+Tで別タブに別セッションを生成します。そのセッションで、以下のコマンドを実行してください。2'これにより、もともと動いていたgnome-shellプロセスが閉じられ、新たに端末内でプロセスが生成されます。標準出力や標準エラー出力の内容が端末に表示されるようになります。このセッションは、ログアウトするまで閉じないでください。gnome-shellのプロセスが中断されてしまうと、キーボード操作が反応しなくなり、ログアウトもできなくなり、また場合によってはシャットダウンも実行できなくなります。絶対にセッションを閉じないでください。nohupコマンドとか使えばそのような心配いらないのかもしれないけど使い方がよく分かっていない。雛形を動かしてみる以下のコマンドを実行し、作成した雛形を有効にしてください。有効にするとすぐに、トップバーに歯車のアイコンが表示されます。world!と表示されます。雛形のソースコードを見るそれでは、ソースコードがどのようになっているのか見てみます。Main.panel._rightBox.remove_child(button);}最初のimportsの部分では、必要なモジュールを読み込んでいます。Node.jsやPHPなどでいうrequireとほぼ同じ役割だと思ってもらって構いません。init関数は、gnome-shellのプロセスが生成された直後に呼ばれる関数で、その後にenable関数が呼ばれます。enable関数は拡張機能が有効になったときにも呼ばれます。そのため、ボタンの表示などUIに関する設定はこの関数内で行うことになります。disable関数は、拡張機能が無効になった時、あるいはgnome-shellプロセスが終了する時に呼ばれます。本当はこの雛形を解説してもいいのですが、今回の拡張機能ではこれらのコードをほとんど利用しませんので、細かな説明は省かせていただきます。雛形コードの詳細な説明が知りたい方は、以下のページが参考になると思います。http://gihyo.jp/admin/serial/01/ubuntu-recipe/0492?page=2拡張機能の仕様を決めるどんなソフトウェア開発に置いても、要件定義と仕様書の作成はきちんと行いましょう。今回の拡張機能では、Dropboxのローカルフォルダがリモートと同期されているときはトップバーにDropboxのアイコンを表示し、同期されていないときは非表示にする。off'という2つのボタンを含むパネルメニューが出現する。folder'ボタンをクリックすると、ローカルの同期先ディレクトリを開く。off'というボタンをクリックすると、Dropboxの同期を中断するということを目指します。upLoginユーザーは見つかりませんでした。