Angular8でAdminLTEを使う方法

f:id:takuyafujita:20190929165413j:plain

はじめに

業務でUIテンプレートのAdminLTEを使うことになったので、事前に触ってみることにしました。Angular8でプロジェクトを作成し、AdminLTEを使ってみることにします。

環境

node -v
v11.13.0
npm -v
6.7.0
ng v
Angular CLI: 8.3.6

Angularのプロジェクト作成

adminLteの名前でプロジェクトを作成します。途中、ルーティングの設定と使用するスタイルシートを聞かれますので、以下の様に選択しました。これですぐに実行できる簡単なAngularのアプリケーションが作成されます。

ng new adminLte
? Would you like to add Angular routing? Yes
? Which stylesheet format would you like to use? CSS

AdminLTEのソースコードを取得

ここからAdminLTEのソースコードを取得します。
今回はLatest releaseの2.4.18を使用します。(2019/09/29時点)

赤枠のリンクからソースコードをダウンロード

f:id:takuyafujita:20190929174356p:plain

必要なフォルダをAngularプロジェクトにコピー

ダウンロードしたファイルを解凍し、必要なフォルダをAngularプロジェクトにコピーします。

AdminLTE-2.4.18フォルダに格納されている以下の3フォルダをコピー

・bower_components
・dist
・plugins

f:id:takuyafujita:20190929182935p:plain

Angularプロジェクトの「src\assets」配下に貼り付け

f:id:takuyafujita:20190929183206p:plain

AdminLTEで使用するCSS、JSをAngularプロジェクトで使用できるようにする

AdminLTE-2.4.18フォルダに格納されている「index2.html」を参考にして、Angularプロジェクトの「index.html」を編集します。

編集内容は
スタイルシートの読み込みを追加

<link rel="stylesheet" href="assets/XXXXX.css">

JavaScriptファイルの読み込みを追加

<script src="assets/XXXXX.js"></script>

の2点です。

また、スタイルシートJavaScriptファイルともに必要なファイルは全てassets配下にコピーしていますので、パスの先頭に「assets/」を追記しておきます。

最終的にAngularプロジェクトの「index.html」が以下の様になっていればOKです。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>adminLte</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <!-- Bootstrap 3.3.7 -->
  <link rel="stylesheet" href="assets/bower_components/bootstrap/dist/css/bootstrap.min.css">
  <!-- Font Awesome -->
  <link rel="stylesheet" href="assets/bower_components/font-awesome/css/font-awesome.min.css">
  <!-- Ionicons -->
  <link rel="stylesheet" href="assets/bower_components/Ionicons/css/ionicons.min.css">
  <!-- jvectormap -->
  <link rel="stylesheet" href="assets/bower_components/jvectormap/jquery-jvectormap.css">
  <!-- Theme style -->
  <link rel="stylesheet" href="assets/dist/css/AdminLTE.min.css">
  <!-- AdminLTE Skins. Choose a skin from the css/skins
       folder instead of downloading all of them to reduce the load. -->
  <link rel="stylesheet" href="assets/dist/css/skins/_all-skins.min.css">
  <!-- Google Font -->
  <link rel="stylesheet"
        href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
</head>
<body>
  <app-root></app-root>
  <!-- jQuery 3 -->
  <script src="assets/bower_components/jquery/dist/jquery.min.js"></script>
  <!-- Bootstrap 3.3.7 -->
  <script src="assets/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
  <!-- FastClick -->
  <script src="assets/bower_components/fastclick/lib/fastclick.js"></script>
  <!-- AdminLTE App -->
  <script src="assets/dist/js/adminlte.min.js"></script>
  <!-- Sparkline -->
  <script src="assets/bower_components/jquery-sparkline/dist/jquery.sparkline.min.js"></script>
  <!-- jvectormap  -->
  <script src="assets/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
  <script src="assets/plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
  <!-- SlimScroll -->
  <script src="assets/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
  <!-- ChartJS -->
  <script src="assets/bower_components/chart.js/Chart.js"></script>
  <!-- AdminLTE dashboard demo (This is only for demo purposes) -->
  <script src="assets/dist/js/pages/dashboard2.js"></script>
  <!-- AdminLTE for demo purposes -->
  <script src="assets/dist/js/demo.js"></script>
</body>
</html>

これでAngularプロジェクトでAdminLTEを使用する準備が整いました。

AdminLTEのテンプレートを使ってみる

AdminLTEのダッシュボードから使ってみたいテンプレートのソースをコピーします。

試しに赤枠のテンプレートを使ってみます。

f:id:takuyafujita:20190929202031p:plain

ソースはChromeの開発者ツールのSourcesタブからコピーして、そのままAngularプロジェクトの「app.component.html」に貼り付けました。

<!-- Main content -->
<section class="content">
  <div class="row">
    <!-- right column -->
    <div class="col-md-6">
      <!-- Horizontal Form -->
      <div class="box box-info">
        <div class="box-header with-border">
          <h3 class="box-title">Horizontal Form</h3>
        </div>
        <!-- /.box-header -->
        <!-- form start -->
        <form class="form-horizontal">
          <div class="box-body">
            <div class="form-group">
              <label for="inputEmail3" class="col-sm-2 control-label">Email</label>

              <div class="col-sm-10">
                <input type="email" class="form-control" id="inputEmail3" placeholder="Email">
              </div>
            </div>
            <div class="form-group">
              <label for="inputPassword3" class="col-sm-2 control-label">Password</label>

              <div class="col-sm-10">
                <input type="password" class="form-control" id="inputPassword3" placeholder="Password">
              </div>
            </div>
            <div class="form-group">
              <div class="col-sm-offset-2 col-sm-10">
                <div class="checkbox">
                  <label>
                    <input type="checkbox"> Remember me
                  </label>
                </div>
              </div>
            </div>
          </div>
          <!-- /.box-body -->
          <div class="box-footer">
            <button type="submit" class="btn btn-default">Cancel</button>
            <button type="submit" class="btn btn-info pull-right">Sign in</button>
          </div>
          <!-- /.box-footer -->
        </form>
      </div>
      <!-- /.box -->
    </div>
    <!--/.col (right) -->
  </div>
  <!-- /.row -->
</section>
<!-- /.content -->

Angularプロジェクトの表示確認

Angularプロジェクトを起動して表示を確認してみます。

ng serve

AdminLTEのテンプレートと同じようにAngularプロジェクトでも表示することができました。

f:id:takuyafujita:20190929202748p:plain

まとめ

AdminLTEは業務系の管理画面で使えるテンプレートが多数あります。ダッシュボードから使いたいテンプレートを選んでソースをコピーして使えるので業務でも使っていけそうです。

Angular7でHelloWorldを表示する

f:id:takuyafujita:20190427080231p:plain

はじめに

公式ドキュメントを参考にしてAngular7のインストールとHelloWorldを表示します。

環境

Node 8.x 以上が必須条件です。

node -v
v10.8.0
npm -v
6.1.0

Angular CLIのインストール

npm install -g @angular/cli

ワークスペースとプロジェクト作成

HelloWorldの名前でプロジェクトを作成します。途中、ルーティングの設定と使用するスタイルシートを聞かれますので、以下の様に選択しました。これですぐに実行できる簡単なアプリケーションが作成されます。

ng new HelloWorld
? Would you like to add Angular routing? Yes
? Which stylesheet format would you like to use? CSS

サーバを起動

ワークスペースに移動して、サーバを起動します。オプションのopenをつけるとAngularのローカルサーバである http://localhost:4200/ を自動的にブラウザで開きます。
※サーバの停止は、ctrl + c です。

cd .\HelloWorld
ng serve --open

アプリケーションの表示確認

ブラウザに以下のような画面が表示されます。(コンポーネントを何も変更していないですが、この時点でHelloWorldが表示されますね。。。)

f:id:takuyafujita:20190427090230p:plain

Angularコンポーネントを編集

せっかくなのでコンポーネントを編集してタイトルの表示内容を変えてみます。サーバを起動した状態で編集すると自動的にコンパイルされ、ブラウザの表示内容も変更されます。

  • ./src/app/app.component.ts を開きます。
  • title プロパティを 'HelloWorld'から 'My First Angular App!'に変更します。
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  // title = 'HelloWorld';
  title = 'My First Angular App!'
}

アプリケーションの表示確認

赤枠のようにタイトルが変わっていれば成功です。

f:id:takuyafujita:20190427091720p:plain

以上です!

GAEのスタンダード環境にLaravel5.7をデプロイする

f:id:takuyafujita:20190407064943j:plain

はじめに

GAEのスタンダード環境にLaravel5.7をデプロイしたので、その手順を書いています。基本的に公式ドキュメントを参考に実施しましたがLaravel5.7だと同じように設定できない箇所がありましたので、一部公式と手順が異なります。

公式ドキュメント

cloud.google.com

Laravelプロジェクト作成

Homestead:7.20.0
php:7.2
Laravel Framework:5.7.28

LaravelのプロジェクトはHomesteadを使用して作成しています。また、スタンダード環境で動作させるためにphp7.2を指定しています。同じようにHomesteadでプロジェクトを作成する場合は下記の記事を参考にしてください。php7.2を指定する方法も書いてあります。

takuyafujita.hatenablog.com

GAEデプロイ用のapp.yamlを作成

以下の内容でapp.yamlを作成します。app.yamlはLaravelプロジェクトの直下に格納します。

runtime: php72

env_variables:
  ## Put production environment variables here.
  APP_KEY: YOUR_APP_KEY
  APP_STORAGE: /tmp
  VIEW_COMPILED_PATH: /tmp

APP_KEYを設定

app.yamlのYOUR_APP_KEYを、次のコマンドで生成したアプリケーションキーに置き換えます。

php artisan key:generate --show

LinuxmacOSを使用している場合は、次のコマンドで自動的にapp.yamlが更新できます。

sed -i '' "s#YOUR_APP_KEY#$(php artisan key:generate --show --no-ansi)#" app.yaml

APP_STORAGEを設定

キャッシュを書き込むためのパスをapp.yamlのAPP_STORAGEに設定した「/tmp」に変更します。

bootstrap > app.php を変更

return文の前に以下の内容を追記します。

# [START] Add the following block to `bootstrap/app.php`
/*
|--------------------------------------------------------------------------
| Set Storage Path
|--------------------------------------------------------------------------
|
| This script allows you to override the default storage location used by
| the  application.  You may set the APP_STORAGE environment variable
| in your .env file,  if not set the default location will be used
|
*/
$app->useStoragePath(env('APP_STORAGE', base_path() . '/storage'));
# [END]

config > view.php を変更

Compiled View Pathを以下の様に変更します。

/*
|--------------------------------------------------------------------------
| Compiled View Path
|--------------------------------------------------------------------------
|
| This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value.
|
*/

// 削除
// 'compiled' => env(
//     'VIEW_COMPILED_PATH',
//     realpath(storage_path('framework/views'))
// ),

// 追加
'compiled' => storage_path(),

laravel-dump-serverを削除

現状、GAEでlaravel-dump-serverを使用すると下記のエラーになります。

Class 'BeyondCode\DumpServer\DumpServerServiceProvider' not found

Laravel5.7.6以降を使用する場合、composer.jsonからbeyondcode/laravel-dump-serverを削除することで回避できます。未確認ですが、laravel-dump-serverはLaravel5.7.6以降で追加されていますので、5.7.5以下のバージョンを使用しているのであれば対応不要かもしれません。

削除前

    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.0",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.5"
    },

削除後

    "require-dev": {
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.5"
    },

削除後はcomposerの更新を忘れずに!

composer update

この問題は下記のissuesが参考になりました。英語だと読むのに苦労しますが情報が多いので助かります!

github.com

GAEにデプロイする

gcloud config set project sample

gcloud app deploy

gcloud app browse

GAEにデプロイした事が無い方は以下の記事に詳細を書いていますので参考にしてください。

takuyafujita.hatenablog.com

デプロイできたか確認

ブラウザが立ち上がり、Laravelがデプロイできました!

f:id:takuyafujita:20190407163027j:plain

まとめ

最初はLaravel5.8で試していたのですが、GAEにデプロイすると様々なエラーが出て時間だけが過ぎてしまっていました。ググってみると5.7でデプロイされている方がいたので5.7で試すとあっさりデプロイできました。何だったんだ今までの苦労は・・・。これも経験ですね。苦労した分、Laravelの画面が表示された時は嬉しかったです。

【Homestead】Laravelの開発環境作成とPHPのバージョンを変更する方法

GAEのスタンダード環境にLaravelをデプロイしようと思いプロジェクトを作成しましたが、調べてみるとPHP7.2で作成する必要がありました。

cloud.google.com

Laravelの開発環境はHomesteadを使用しており、現時点(2019/03/29)で最新バージョンを使用するとPHP7.3がデフォルトになります。HomesteadではPHPのバージョンを指定することができますので、今回はLaravelの開発環境であるHomesteadのインストール方法とHomesteadでPHPのバージョンを変更する方法を記載します。

なお、作業環境は windows 10 です。

Laravelの開発環境(Homestead)を作成

Homesteadを使うには、Git、VirtualBoxVagrantが必要になります。使い方はネットで検索すると多数出てきますので割愛しますが、参考までに私はこの記事を参考にしてインストールしました。Laravelのチュートリアルもあります!

www.hypertextcandy.com

Homesteadのbox追加

vagrant box add laravel/homestead

※ネットワークの環境にもよりますが時間がかかります。

途中、どの仮想環境を使用するか聞いてきます。私は'3'のvirtualboxを指定しました。

1) hyperv
2) parallels
3) virtualbox
4) vmware_desktop

Homesteadのインストール

git clone https://github.com/laravel/homestead.git Homestead
cd Homestead
git checkout v8.2.0
./init.bat

PHP7.2を使用する設定

インストールしたHomesteadの最新バージョンではPHPのデフォルトが7.3になりますが、ymlの設定でPHPのバージョンを変更することができます。(7.1、7.2、7.3の何れか)

今回は7.2に変更してみます。

Homestead.yml の設定変更

Homesteadフォルダ内にある「Homestead.yml」の sites: に php: "7.2" を追記します。
ついでに to: の設定もこの次に行うlaravelプロジェクトの作成に合わせて、下記のように変更しておきます。

sites:
    - map: homestead.test
      to: /home/vagrant/code/sample/public
      php: "7.2"

仮想環境を起動する

vagrant up

仮想環境に接続する

vagrant ssh

laravelのプロジェクト作成

codeフォルダを作成し、その配下にlaravelプロジェクト(sample)を作成します。

mkdir code
cd code/
composer create-project laravel/laravel sample

index.php ファイルを作成

PHPのバージョンはphpinfoを表示して確認します。phpinfoを表示する index.php を作成し、以下に格納します。

/home/vagrant/code/sample/public

index.php の内容は以下の通りです。

<?php
echo phpinfo();
?>

Hostsファイルの設定

Hostsファイル(C:\Windows\System32\drivers\etc\hosts)に以下の内容を追加します。

192.168.10.10  homestead.test

PHPのバージョン確認

chromeで以下に接続し、PHPのバージョンが7.2になっていれば変更完了です。

http://homestead.test/

f:id:takuyafujita:20190329234006j:plain

まとめ

最初はコマンド(php -v)でバージョン確認をしており、何故か7.3としか表示されず悩んでいましたがphpinfoで確認したら正しく変更されていました!これも経験ですね。ちなみにsampleプロジェクトをGAEのスタンダード環境にデプロイしてみましたが、色々とエラーになりました。次はGAEでLaravelを動かすのが目標です。

【GCP】GAEにPHPのプロジェクトをデプロイする

はじめに

この記事はGAEにWEBアプリのプロジェクトをデプロイする方法を書いていますが、結果的に「HelloWorld」を表示するだけの「index.php」のみデプロイすることになりました。なので、同じことをやっているGAEのチュートリアルの方が断然分かりやすいです。

それでも読みたいという方はどうぞ読んでください。

Google Cloud Platform 登録

GAE(Google App Engine)を使うにはGCPGoogle Cloud Platform)に登録する必要があります。

以前、GCPの無料トライアル登録手順を書きましたのでこちらを参考にしてください。

takuyafujita.hatenablog.com

プロジェクト作成

GCPのコンソール画面からプロジェクトを作成します。

Google App Engine 設定

GCPのコンソール画面から App Engine を選択します。言語は「PHP」、リージョンは「asia-northeast1」で設定しました。

Google Cloud SDK インストール

GAEにデプロイする為にSDKが必要です。開発環境がwindowsなので、下記サイトからインストーラーをダウンロードしてインストールしました。次に行うSDKの初期化についても書いてあります。

cloud.google.com

Google Cloud SDK 初期化

下記コマンドでSDKの初期化を行います。

gcloud init

PHPプロジェクト作成

本当はHomesteadで作成したLaravelのプロジェクトをデプロイする予定でしたが、デプロイ後にエラーが出たので今回は「HelloWorld」を表示するだけのシンプルな「index.php」を作成しました。

app.yaml 作成

GAEにデプロイする為にプロジェクトの設定を記載した「app.yaml」が必要です。今回は公式ドキュメントに記載されている内容そのままで作成しました。「app.yaml」はプロジェクトのルートディレクトリに配置します。

cloud.google.com

デプロイ

デプロイしたいプロジェクト配下で下記コマンドを実行します。

gcloud app deploy

デプロイしたプロジェクトをブラウザで表示

下記コマンドでブラウザが開き、「HelloWorld」が表示されればデプロイ成功です。

gcloud app browse

まとめ

GAEへのデプロイ方法は簡単ですが、GAEの設定(スタンダードとかフレキシブルって何が違うの?)や「app.yaml」の設定内容を理解するのに時間がかかりました。
また、Laravelのデプロイでエラーになった原因は、PHPのバージョンが原因かもしれません。GAEでサポートしていない7.3を使用していた。
「app.yaml」の設定もちゃんと理解できていないので勉強しつつ再度チャレンジしてみます。

Vue.jsのインストール

Node.jsとnpmのバージョン

node -v
v10.8.0
npm -v
4.0.5

VueCLIのインストール

npm install -g @vue/cli

プロジェクトの作成

vue create sample

サンプルの実行

cd sample
npm run serve

サンプルを表示

http://localhost:8080/

f:id:takuyafujita:20190207220757j:plain

【GCP】無料トライアル登録手順

Google Map のAPIを使用して地図を表示していますが、特定の環境下で「Googleマップが正しく読み込まれませんでした」となります。

ググってみると請求先アカウントが登録されていない場合に表示される(ことがある?)とありましたので早速登録してみます。

今回はGCPの無料トライアル登録で請求先アカウントも登録する手順を紹介します。

Google Cloud Platform の無料トライアル登録手順

右上の有効化ボタンをクリック

f:id:takuyafujita:20190116232312p:plain

国を選択、利用規約に同意して実行

f:id:takuyafujita:20190116232358p:plain

アカウントの種類、名前と住所を入力

f:id:takuyafujita:20190116232410p:plain

メインの連絡先、クレジットカード情報を入力して無料トライアルを開始

f:id:takuyafujita:20190116232424p:plain

完了

f:id:takuyafujita:20190116232434p:plain

以上です!