レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

最新版のGrive(0.3.0)を使ってGoogleドライブと同期してみる

2013年6月3日 2014年1月11日
grive Google Drive

今回は、Googleが手掛けるオンラインストレージサービス Googleドライブを使ってみたいと思います。 Googleドライブは、Windows用のソフトウェアは提供していますが、Linuxは、今後提供予定として、今のところ提供されていません。 そのため、手動でウェブブラウザを経由してアップロード、ダウンロードすることはできますが、同期をとることはできません。

そこで、今回は、オープンソースのGoogleドライブとの同期ソフト Grive を使って Googleドライブ とローカルディスクとの同期を行ってみたいと思います。


安定版のGriveについては、 安定版のGrive(0.2.0)を使ってGoogleドライブと同期してみる を参照してください。インストールは、安定版が楽です。

Googleドライブとは、
大手検索サイト Google が提供する無料のオンラインストレージサービスです。 つまり、無料で使えるネットワーク上のディスクというイメージです。 もちろん、どこからでも必要な情報(ファイル)をアップロード、ダウンロードできます。 ローカルディスクと同期をとること可能で、最近のストレージサービスの流れでもあります。 ストレージサービスで有名な DropboxやSugarSync、SkyDriveも同様に同期型のオンラインストレージサービスです。

5GBまでは、完全無料で利用することができます。それ以上利用したい方には、有料プランが用意されています。
Griveとは、
Googleドライブサーバーと接続し、ロールディスクとの同期を行う Google ドライブ クライアント ソフトです。

以下は、プロジェクトの趣旨、概要になります。(http://www.lbreda.com/grive/start 英文を和訳したものです)
このプロジェクトの目的は、GNU/Linux用のGoogle ドライブ クライアントの独立したオープンソース実装を提供することです。 Googleドライブサーバーとの接続には、GoogleドキュメントリストAPIを使用しています。また、ソースコード標準C++で書かれています。

Griveをインストールする

まずは、Griveをインストールします。
Ubuntuではバイナリパッケージがあるみたいですが、 CentOS,Scientific Linuxでは、バイナリパッケージがありません。 そのため、Griveをmakeインストールする必要があります。これが、結構、面倒です。一つ一つ、順を追って簡単に解説してみます。


最低限必要なツール、ライブラリをインストールする

Griveをmakeインストールするのに必要なパッケージを、まずは、インストールします。


CentOS,Scientific Linux

  • 必要なツールをインストールします。
    # ruby : yajlインストール時に必要
    # gcc gcc-c++ make : makeインストールする際に必要
    # wget, git : 最新版の各ソースコードをダウンロード時に必要
    $ yum install -y  gcc gcc-c++ make git wget ruby
    ...

  • 必要なライブラリをインストールします。
    # boost系は、インストールせずに自前で最新版をインストールする
    # その他のライブラリは、cmake,griveで必要なパッケージ
    $ yum install -y  libgcrypt-devel json-c-devel libcurl-devel expat-devel binutils-devel qt-devel bzip2-devel libarchive-devel
    ...
    json-c-devel のバイナリパッケージは、EPELにあるので、EPELを有効にしてインストールする必要があります。
    以下は、EPELのリポジトリをインストールする際のイメージです。
    $ rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
    http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm を取得中
    警告: /var/tmp/rpm-tmp.l5NhSw: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
    準備中...                ########################################### [100%]
       1:epel-release           ########################################### [100%]
    詳しくは、リポジトリの追加・削除、無効・有効の設定をしてみる を参照してください。
    qt-devel は、griveコマンドには必要ありませんが、GUI版 の bgrive をmakeする際に必要になります。
    もし、GUI版が必要なければ、ここでのインストールは不要です。

Griveをmakeインストールするには、上記以外に以下のものが必要です。
  • C++クラスライブラリ boost

    CentOS 6,Scientific Linux では、 バージョン 1.41 が提供されています。
    Griveが必要とするboostのバージョンは、1.46 以降なので、これも最新版をインストールする必要があります。

  • もう一つのJSONライブラリ yajl

    これは、CentOS 6,Scientific Linux では、バイナリパッケージが提供されていませんので、 これもmakeインストールする必要があります。

  • ソフトウェアのビルドを自動化 cmake

    CentOS 6,Scientific Linux では、 バージョン 2.6.4 が提供されています。
    Griveが必要とするcmakeのバージョンは、2.8 以降なので、これも最新版をインストールする必要があります。


上記にパッケージについて、以降、順次インストールします。

Debian

  • 必要なツールをインストールします。
    # gcc g++ make : makeインストールする際に必要
    # wget, git : 最新版の各ソースコードをダウンロード時に必要
    $ aptitude install -y  gcc g++ make git wget cmake
    ...

  • 必要なライブラリをインストールします。
    # cmake,griveで必要なパッケージ
    $ aptitude install -y  libgcrypt11-dev libjson0-dev libcurl4-openssl-dev libexpat1-dev binutils-dev libboost-dev libboost-program-options-dev libboost-filesystem-dev libboost-system-dev libboost-test-dev libyajl-dev libqt4-dev
    ...

libqt4-dev は、griveコマンドには必要ありませんが、GUI版 の bgrive をmakeする際に必要になります。
もし、GUI版が必要なければ、ここでのインストールは不要です。
OSバージョンに対応する 各パッケージのバージョンについて、以下のとおりです。
  • Debian 6
    • cmake :2.8.2 (OK)
    • boost(libboost) :1.42 (NG)
    • json(libjson0) :0.9 (NG)
  • Debian 7
    • cmake :2.8.9 (OK)
    • boost(libboost) :1.49 (OK)
    • json(libjson0) :0.10 (OK)
  • Ubuntu 10
    • cmake :2.8.0 (OK)
    • boost(libboost) :1.40 (NG)
    • json(libjson0) :0.9 (NG)
  • Ubuntu 12
    • cmake :2.8.7 (OK)
    • boost(libboost) :1.48 (OK)
    • json(libjson0) :0.9 (NG)
ここでターゲットにしているのが、Debian 7にとどめているのは、 上記のように対応するOSのバージョンによって差が大きく、jsonへの対応をも含むため、ここでは、回避しています。
Debian 7では、デフォルトのパッケージをインストールすれば、ほぼ griveのmakeインストール環境が整います。
そのため、以降の各ライブラリ、ツールのインストールは、不要です。

Debian 7 の方は、Griveインストールへお進みください。


また、Ubuntu 12では、有志者によるバイナリパッケージもありますので、そちらを使用されることをおすすめします。
以外のバージョンに関しては、

安定版のGrive 安定版のGrive(0.2.0)を使ってGoogleドライブと同期してみる をおすすめします。



以降の boostインストールは、CentOS 6,Scientific Linux 6 のみ必要です。
Debian 7 の方は、Griveインストールへお進みください。

boostをインストールする

C++クラスライブラリboostの最新版をインストールします。

# まずは、boostが既にインストールされている場合は、アンインストールします。
# --- boostがインストールされていない場合は、スキップしてください。
$ yum remove boost

# boostの最新版をダウンロードします。
# --- 現在の最新版は、1.53 のようなので、それをダウンロードします。
$ cd /usr/local/src
[src]$ wget http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.gz/download
...

# boostの最新版を解凍します。
[src]$ tar xfz boost_1_53_0.tar.gz
[src]$ cd boost_1_53_0

# boostの最新版をmake インストールします。
# --- boostのmake インストールの仕方は、独自のスクリプトを起動して行います。
[boost_1_53_0]$ ./bootstrap.sh --prefix=/usr/local
...
[boost_1_53_0]$ ./b2 install -j2 --prefix=/usr/local
...
これでインストールされた結果、以下のディレクトリにそれぞれインストールされます。

  • boost インクルードのディレクトリ先 : /usr/local/include/boost
  • boost ライブラリのディレクトリ先 : /usr/local/lib


以降の yajlインストールは、CentOS 6,Scientific Linux 6 のみ必要です。
Debian 7 の方は、Griveインストールへお進みください。

yajlをインストールする

もう一つのJSONライブラリyajlの最新版をインストールします。

# yajlの最新版をダウンロードします。
# --- gitを使って、最新版をダウンロードします。
$ cd /usr/local/src
[src]$ git clone git://github.com/lloyd/yajl
...

# yajlの最新版をmake インストールします。
[src]$ cd yajl/
[yajl]$ ./configure && make install
...
これでインストールされた結果、以下のディレクトリにそれぞれインストールされます。

  • yajl インクルードのディレクトリ先 : /usr/local/include/yajl
  • yajl ライブラリのディレクトリ先 : /usr/local/lib


以降の cmakeインストールは、CentOS 6,Scientific Linux 6 のみ必要です。
Debian 7 の方は、Griveインストールへお進みください。

cmakeをインストールする

ソフトウェアのビルドを自動化 cmakeの最新版をインストールします。
32bit OSの場合は、バイナリをスクリプトを使ってインストールすることができます。
64bit OSの場合は、無さそう?なのでmakeインストールしてみます。

  • 32bit OSの場合 :
    # cmakeの最新版をインストールするためのスクリプトをダウンロードします。
    # --- cmakeの最新版は、スクリプトでバイナリのみをインストールすることができます。
    # --- cmakeの最新版をインストールしたところにダウンロードします。
    $ cd /usr/local
    [local]$ wget -O cmake.sh http://www.cmake.org/files/v2.8/cmake-2.8.11-Linux-i386.sh
    ...
    
    # cmakeの最新版をインストールします。
    [local]$ sh cmake.sh
    ...
    Do you accept the license? [yN]:
    y        ###  ← ここで y を入力
    By default the CMake will be installed in:
      "/usr/local/cmake-2.8.11-Linux-i386"
    Do you want to include the subdirectory cmake-2.8.11-Linux-i386?
    Saying no will install in: "/usr/local" [Yn]:
    n        ###  ← ここで n を入力
    
    Using target directory: /usr/local
    Extracting, please wait...
    
    Unpacking finished successfully

  • 64bit OSの場合 :
    # cmakeの最新版をダウンロードします。
    # --- 現在の最新版は、2.8.11 のようなので、それをダウンロードします。
    $ cd /usr/local/src
    [src]$ wget http://www.cmake.org/files/v2.8/cmake-2.8.11.tar.gz
    ...
    
    # cmakeの最新版を解凍します。
    [src]$ tar xfz cmake-2.8.11.tar.gz
    [src]$ cd cmake-2.8.11
    
    # cmakeの最新版をmake インストールします。
    [cmake-2.8.11]$ ./bootstrap --prefix=/usr/local --system-libs
    ...
    [cmake-2.8.11]$ make
    ...
    [cmake-2.8.11]$ make install
    ...
    
    # cmakeのバイナリがインストールされたディレクトリおよびバージョンを確認しておきます。
    [cmake-2.8.11]$ which cmake
    /usr/local/bin/cmake
    
    [cmake-2.8.11]$ cmake --version
    cmake version 2.8.11


Griveをインストールする

ここまでできたら、いよいよ Griveをインストールします。

  1. Griveの最新版をダウンロードします。
    # Griveの最新版をダウンロードします。
    # --- gitを使って、最新版をダウンロードします。
    $ cd /usr/local/src
    [src]$ git clone git://github.com/Grive/grive.git
    ...

  2. boostのパスを変更します。

    以降の boostパスの変更は、CentOS 6,Scientific Linux 6 のみ必要です。
    Debian 7 の方は、32bit OSの場合の対応へお進みください。


    先にboostの最新版を手動でインストールしましたので、 そのインクルードパス、ライブラリパスを Grive のcmakeに通知する必要があります。
    ここでは、/usr/loca/src/grive/libgrive/CMakeLists.txt を編集します。

    ...
    find_package(LibGcrypt REQUIRED)
    find_package(JSONC REQUIRED)
    find_package(CURL REQUIRED)
    find_package(EXPAT REQUIRED)
    
    # ↓ ここから
    # Boost の検索前にパスを設定しておきます。
    SET( BOOST_INCLUDEDIR "/usr/local/include/boost" )
    SET( BOOST_LIBRARYDIR "/usr/local/lib" )
    # ↑ ここまで
    
    find_package(Boost 1.40.0 COMPONENTS program_options filesystem unit_test_framework system REQUIRED)
    find_package(BFD)
    find_package(CppUnit)
    find_package(Iberty)
    find_package(ZLIB)
    ...

  3. 32bit OSの場合、一部でコンパイルエラーが出るのを対処します。

    32bit OSの場合、一部で 64bitのみ対応したコードがあるので コンパイルエラーが出ます。 その対処をします。
    ここでは、/usr/loca/src/grive/libgrive/src/drive/State.cc を編集します。

    ...
    void State::Write( const fs::path& filename ) const
    {
            Json last_sync ;
            // 32bit OS対応
            //last_sync.Add( "sec",   Json( m_last_sync.Sec() ) );
            last_sync.Add( "sec",   Json((boost::uint64_t) m_last_sync.Sec() ) );
            // 32bit OS対応
            //last_sync.Add( "nsec",  Json( m_last_sync.NanoSec() ) );
            last_sync.Add( "nsec",  Json((boost::uint64_t) m_last_sync.NanoSec() ) );
    
            Json result ;
            result.Add( "last_sync", last_sync ) ;
            // 32bit OS対応
            //result.Add( "change_stamp", Json( m_cstamp) ) ;
            result.Add( "change_stamp", Json((boost::uint64_t) m_cstamp) ) ;
    
            std::ofstream fs( filename.string().c_str() ) ;
            fs << result ;
    }
    ...

  4. GUI版が不要な方は、bgrive をmakeしないように設定します。

    CUI版の grive のみ良い方は、GUI版 の bgrive をmake対象から外します。
    ここでは、/usr/loca/src/grive/CMakeLists.txt を編集します。

    ...
    add_subdirectory( libgrive )
    add_subdirectory( grive )
    # ↓ 以下をコメントアウトします。</span>
    # add_subdirectory( bgrive )

  5. makeインストールします。

    ようやく、Griveをmakeインストールします。

    $ cd /usr/local/src/grive/
    
    # cmake でmakefileを作成します。
    [grive]$ cmake .
    ...
    
    # make インストールします。
    [grive]$ make
    ...
    [grive]$ make install
    ...
    
    # make インストールできたら、
    # grive のインストール先、およびバージョン情報を出力してみます。
    [grive]$ which grive
    /usr/local/bin/grive
    
    [grive]$ grive --version
    grive version 0.3.0-pre May 29 2013 05:45:53
    makeインストールできても、以下のようにバージョン情報がうまく出力されない場合は、ライブラリパスが有効になっていないためです。
    [grive]$ grive --version
    grive: error while loading shared libraries: libboost_program_options.so.1.53.0: cannot open shared object file: No such file or directory
    この場合、環境変数のLD_LIBRARY_PATHに先にboostのライブラリパスを設定すれば、正しく動作するようになります。
    [grive]$ export LD_LIBRARY_PATH=/usr/local/lib
    [grive]$ grive --version
    grive version 0.3.0-pre May 29 2013 05:45:53


Griveの簡単な動作確認をする

Griveのmakeインストールができたら、最後に簡単な動作確認をしてみましょう。

  1. Googleドライブと同期をとりたいディレクトリに向けます。
    $ mkdir /va/grive/
    $ cd /va/grive/
    
    # 同期を確認するために簡単なテキストファイルを作成します。
    [grive]$ echo 'testだよん' > test.txt
    [grive]$ ls
    test.txt

  2. Googleドライブでの同期をとるための権限をGriveに与えます。
    1. Griveで権限取得のためのURLを出力します。
      [grive]$ grive -a
      -----------------------
      Please go to this URL and get an authentication code:
      
      https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww%2Egoogleapis%2Ecom%2Fauth%2Fuserinfo%2Eemail+...
      
      -----------------------
      Please input the authentication code here:
      画面は、Please input the authentication code here: で停止しています。
      この状態のままにしておきます。以降で取得した認証コードをここに入力して完了となります。

    2. ウェブブラウザから 先に出力されたURLへアクセスし、認証コードを取得します。

      ログインしていないなら、以下のようにログイン画面が表示されます。
      メールアドレス、パスワードでログインします。

      Googleドライブログイン

      権限を与えるか否かの確認画面が表示されます。
      ここで、アクセスを許可をクリックします。

      Googleドライブアクセス許可

      権限を与えるための認証コードが表示されます。
      ここで、テキストボックスに表示されている認証コードをコピーします。

      Googleドライブ認証コード

    3. 取得した認証コードをGriveに設定します。

      先にコピーした認証コードを 先の Please input the authentication code here: で停止している画面へ入力します。

      [grive]$ grive -a
      -----------------------
      Please go to this URL and get an authentication code:
      
      https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww%2Egoogleapis%2Ecom%2Fauth%2Fuserinfo%2Eemail+...
      
      -----------------------
      Please input the authentication code here:
      SAag0vasv98aa34tbfasDE08fak;gh35hsdvlsdaerhwerhqweEAfa9vzsdvlareturn
      Reading local directories
      Synchronizing folders
      Reading remote server file list
      Synchronizing files
      sync "./test.txt" doesn’t exist in server, uploading
      Finished!

      この色の文字の部分が、先にコピーした認証コードです。Enterで同期を開始します。


    ここまでできたら、同期はOKのはずです。
    一応、Googleドライブにログインしてファイルを確認してみましょう。

    Googleドライブ

    ちゃんとファイルがありますね。


  3. ファイルを削除してみましょう。

    今度は、Googleドライブにログインし、ファイルを削除してみましょう。

    Googleドライブ

    削除したいファイルを選択して、ゴミ箱のアイコンをクリックするだけで削除できます。

    削除を終えたら、Griveで同期をとってみましょう。

    [grive]$ grive
    Reading local directories
    Synchronizing folders
    Reading remote server file list
    Detecting changes from last sync
    Synchronizing files
    sync "./test.txt" deleted in remote. deleting local
    Finished!

    このように同期でローカルディスク側が削除されればOKです。

    同期が正しく動作しないことがあります。
    例えば、ローカルディスクに新規ファイルを作成して同期をとっても、ローカルディスク側が削除されてしまいます。
    # 新規のファイルを作成します。
    [grive]$ echo 'testだよん2' > test2.txt
    # 続けて同期をとります。
    [grive]$ grive
    Reading local directories
    Synchronizing folders
    Reading remote server file list
    Detecting changes from last sync
    Synchronizing files
    sync "./test2.txt" deleted in remote. deleting local
    Finished!
    と、このように削除されてしまうことがあります。
    また、逆の場合もあります。Googleドライブ側がいつも削除されてしまうこともあります。

    これは、日時がGoogleドライブサーバーとあっていないのが原因である可能性が大きいです。
    [grive]$ ntpdate ntp.nict.jp
     3 Jun 13:59:39 ntpdate[12285]: step time server 133.243.238.244 offset 383389.930291 sec
    手動でもOKなので、まずは、日時を合わせてやってみてください。 たぶん、うまく同期がとれないほとんどの場合は、これで解消できるのではないかと思います。たぶん。

ざっとこんな感じです。

これは、バックアップ用になかなか使えそうです。
とりあえず、別のサーバーへバックアップしたいことが良くあります。 その際に Google ドライブ を使えるのは、非常に有りがたいです。

ご興味のある方は、ちょっと手間がかかりますが、まずは、お試しあれ。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

安定版のGrive(0.2.0)を使ってGoogleドライブと同期してみる

最新版のGrive(0.3.0)を使ってGoogleドライブと同期してみる では、最新のGrive(0.3.0)をインストールしてみました。 ...

lsyncd 2.0.x (最新版) を Debian 6 にインストールする

以前のrsync + ssh でファイルの同期をとるで rsync によるサーバー間でのファイルの同期について話をしました。 その記事では、自 ...

procmailの代わりに(makeを使って)maildropをインストールする(make編)

procmailの代わりに(rpmを作成して)maildropをインストールする(RPM編) では、CentOS/Scientific Linu ...

makeでインストールしたものをrpmパッケージに作成できる checkinstall をインストールする

今回は、非常に便利なrpmパッケージを作成してくれるcheckinstall をインストールしてみます。 FreeBSDやLinuxなどの ...

Open JTalk (テキストを音声へ変換)をインストールし、使ってみる

今回は、Open JTalkをインストールして、使ってみます。 Open JTalkは、簡単にいうと、 文字列(テキスト)から音声へ変換 ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2334 [s]