20190804のlaravelに関する記事は5件です。

Leanpub で Laravel 入門チュートリアルの電子書籍版を作りました。

laravel-primer-book-cover.png

技術ブログに公開している『入門 Laravel チュートリアル(全11回)』を、電子書籍版にまとめました :hugging: :tada:

書籍ページ :point_down:
https://leanpub.com/laravel-primer

Leanpub という電子書籍作成〜販売プラットフォームを利用しましたが、公開までのフローがかなりモダンで低ハードルでしたので、本の宣伝も兼ねて紹介したいと思います。

Leanpub

AwesomeScreenshot-leanpub-bookstore-book-2019-08-04_10_08.png

Leanpub は、電子書籍の作成から販売までを行えるプラットフォームです。

カナダのスタートアップらしく、テック系の書籍の取り扱いが多いです。そのためか、制作フローもデベロッパーフレンドリーになっています。

日本語の書籍はまだほとんど出版されていませんが、『Everyday Rails - RSpecによるRailsテスト入門』は結構知られているのではないでしょうか。

便利なところ

  • Git でコンテンツを管理できる。
  • Markdown で書いた内容が PDF / EPUB / MOBI 版として自動出力される。
  • ボタン一つで公開、更新できる。
  • 読者は通知された本の更新を無料でダウンロードできる。
  • 収益は Paypal で受け取れる。
  • 無料で始められる。

当初 Amazon から出そうと思ったのですが、ダイレクトパブリッシングの登録方法が少し煩雑だったのと、出版するコンテンツの生成方法(MOBI ファイルってどうやって作るの?)は結局自分で解決する必要がありそうだったので、二の足を踏んでいました。

Leanpub では以前本を買ったことがあって、どうやら出版・販売もできるらしいということで調べてみると、かなりハードルが低そうだったので、今回チャレンジしてみました。

なにより、書き慣れた Markdown が使えて、そこから PDF / EPUB / MOBI 版が自動出力されるというのに驚きました。

制作フロー

簡単に制作フローを紹介します。

(1)
まず Git リポジトリを作成します。以下のディレクトリ構成が必要です。

└─ /manuscript
    ├─ /resources
    │   └─ 画像など
    ├─ Book.txt
    ├─ chapter1.md
    ├─ chapter2.md
    └─ chapter3.md

manuscript というディレクトリにマークダウンファイルを書いていきます。
章ごとにファイルを作成します。ファイル名は任意です。

さらに Book.txt に章立てを定義します。単に章ごとにファイル名を並べるだけです。

Book.txt
chapter1.md
chapter2.md
chapter3.md

これだけで、マークダウン中の h1h2 を読み取り、目次を自動生成してくれます。

(2)
GitHub にリモートリポジトリを用意します。リポジトリは private で構いません。

Collaborators に Leanpub ユーザーを追加する必要があります。これにより、Leanpub 側で更新内容を取得できるようになります。

(3)
本の内容は Markua という独自記法のマークダウンで記述します。独自記法と言っても、ほとんど普通のマークダウンです。大きく違うところは生の HTML は使えないくらい。

書けたらリモートリポジトリにプッシュします。

(4)
プレビュー版は、Leanpub の管理画面からボタン一つで出力できます。
PDF / EPUB / MOBI 版がそれぞれ出力されます。

(5)
公開も、プレビューと同様にボタン一つです。
表示画像をアップしたり値段を決めたり紹介文を書いたりしてから、公開します。

いかがでしょうか。本当に公開まではこれだけでした。
静的サイトジェネレーターみたいなノリで電子書籍が出せてしまいました :metal:

もちろん、プラットフォームとしては Amazon の方が圧倒的にオーディエンスが多く広いでしょう。ただ、手軽さでは Leanpub に軍配が上がると思います。

(技術書は必ずしも広く一般にリーチする必要もないでしょうし…。)

エンジニアが情報発信をして対価を得るチャネルとしてもっと知られて、日本語のコンテンツも増えるといいなーと思うので、この記事で少し興味をもってもらえると嬉しいです。

そして、Web 開発者の皆さんは、こちらの本もぜひチェックしてください!
:closed_book: :point_right: https://leanpub.com/laravel-primer

以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelで外部ファイルを使用してcssを適用する手順

laravelでcssを適用する時に躓いたので、メモをします。

  1. /public/css/にcssファイルを作成します。例としてstyles.cssという名前で作成したとします。

  2. viewファイルに以下の一文を記述します。
    <link rel="stylesheet" href="{{ asset('css/styles.css') }}">
    httpsで表示するページなら、assetの部分がsecure_assetになります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel5.8でVuetifyをインストール

はじめに

Vuetifyは2019年7月に2系へとバージョンアップしました。
しかし、まだまだ情報が少ないので、とりあえず1系でVuetifyを使いたい方向けです。

環境構築

まずはLaravelのプロジェクトを作りましょう。

composer create-project "laravel/laravel=5.8.*" myapp

必要なnodeモジュールをインストール。
vuetify@1で1系の最新がインストールされます。

npm install
npm install vue-router vuetify@1 css-loader material-design-icons-iconfont

vuetify1.5.16が入りました。

package.json
{
    "private": true,
    "scripts": {
        "dev": "npm run development",
        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "npm run development -- --watch",
        "watch-poll": "npm run watch -- --watch-poll",
        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
        "prod": "npm run production",
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
    },
    "devDependencies": {
        "axios": "^0.18",
        "bootstrap": "^4.1.0",
        "cross-env": "^5.1",
        "jquery": "^3.2",
        "laravel-mix": "^4.0.7",
        "lodash": "^4.17.5",
        "popper.js": "^1.12",
        "resolve-url-loader": "^2.3.1",
        "sass": "^1.15.2",
        "sass-loader": "^7.1.0",
        "vue": "^2.5.17",
        "vue-template-compiler": "^2.6.10"
    },
    "dependencies": {
        "css-loader": "^3.1.0",
        "material-design-icons-iconfont": "^5.0.1",
        "vue-router": "^3.0.7",
        "vuetify": "^1.5.16"
    }
}

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laradock 起動時にphp-redisのFailed to fetchが出て失敗した時の対処法

最近Dockerの基本を勉強したので、早速Laravelで何か作ってみようとLaradockをローカルで起動しようとした際に表題のエラーが出たので対処した方法を記載します。

もっと簡単な、あるいはまっとうなやりかたあれば教えていただきたく、です。
(確認の仕方も含めて丁寧目に書いています)

※Qiitaへの投稿は初めてなので、色々不安ですが、誤りなどありましたらご指摘ください。

状況

ローカルへの環境構築でdocker起動までの手順は下記の記事に従いました。
なお私の環境はmacです。
 DockerでLaravelの環境を構築し、Herokuへのデプロイを目指すためのチュートリアル

dockerの起動

laradockディレクトリ内でdocker-compose upします。

$ docker-compose up -d nginx mysql phpmyadmin

すると今回は以下のようなエラーが出て、起動に失敗しました。

エラー内容

E: Failed to fetch http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/p/php-redis/php-redis_4.2.0-1+ubuntu16.04.1+deb.sury.org+1_amd64.deb  404  Not Found

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
ERROR: Service 'workspace' failed to build: The command '/bin/sh -c if [ ${INSTALL_PHPREDIS} = true ]; then     apt-get install -yqq php-redis ;fi' returned a non-zero code: 100

php-redisのfetchに失敗しています。

※ ちなみにurl(http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/p/php-redis/php-redis_4.2.0-1+ubuntu16.04.1+deb.sury.org+1_amd64.deb) を確認するとたしかに該当のページが存在しません。

続いて「run apt-get updateするか--fix-missingオプションつけてやってみて」みたいなことが書いてあります。
とりあえずapt-get updateを試してみることにします。

手順

最後のエラーメッセージにworkspaceのビルドの際に下記のコマンドで失敗してるとあります。

'/bin/sh -c if [ ${INSTALL_PHPREDIS} = true ]; then     apt-get install -yqq php-redis ;fi' returned a non-zero code: 100

なので今回はこの上記の箇所にapt-get updateを足してみることにします。

上記の箇所ってどこ?

Dockerではコンテナ起動時にDockerfileの内容に従ってビルドを行います。
なのでworkspaceDockerfileを探します。

# カレントディレクトリを確認
$ pwd
# laradockディレクトリ内であることを確認
# 私の場合 → /Users/ユーザー名/Docker/project_name/laradock

# ディレクトリ内のリストを表示
$ ls
DOCUMENTATION       ide-codiad      nginx
LICENSE         ide-icecoder        percona
adminer         ide-theia       php-fpm
aerospike       ide-webide      php-worker
apache2         ipython         phpmyadmin
aws-eb-cli      jenkins         portainer
beanstalkd      jupyterhub      postgres
beanstalkd-console  kibana          postgres-postgis
caddy           laravel-echo-server rabbitmq
cassandra       laravel-horizon     redis
certbot         logs            redis-cluster
couchdb         logstash        redis-webui
docker-compose.sync.yml maildev         rethinkdb
docker-compose.yml  mailhog         selenium
docker-registry     manticore       solr
docker-sync.yml     mariadb         sonarqube
docker-web-ui       memcached       sync.sh
elasticsearch       minio           thumbor
env-example     mongo           traefik
gitlab          mongo-webui     travis-build.sh
grafana         mosquitto       varnish
graylog         mssql           'workspace'
haproxy         mysql           zookeeper
hhvm            neo4j

# workspaceがあるのを確認 ※わざとハイライトにしています

# workspaceへ移動
$ cd workspace

# workspace内のリストを表示
$ ls
'Dockerfile'        composer.json       insecure_id_rsa.pub
aerospike.ini       crontab         mc
aliases.sh      insecure_id_rsa     xdebug.ini
auth.json       insecure_id_rsa.ppk

# Dockerfileがあるのを確認 ※わざとハイライトにしています

# Dockerfileを編集
$ vim Dockerfile

コマンドモードで/[ ${INSTALL_PHPREDIS} = true ]などとして該当箇所を検索します。

Dockerfile
RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
    apt-get install -yqq php-redis \
;fi

# 上記を下記のように書き換える

RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
    apt-get update && \
    apt-get install -yqq php-redis \
;fi

:wqで保存してファイルを閉じます。

dockerを再度起動

laradockディレクトリに戻って再度起動してみます。

$ cd ../ # workspaceディレクトリから一つ上のディレクトリに戻る 

$ docker-compose up -d nginx mysql phpmyadmin

... # 初回起動時はそこそこ時間がかかる

Creating project_name_docker-in-docker_1 ... done
Creating project_name_mysql_1            ... done
Creating project_name_workspace_1        ... done
Creating project_name_phpmyadmin_1       ... done
Creating project_name_php-fpm_1          ... done
Creating project_name_nginx_1            ... done

今度はうまく起動できたようです。

一応dockerコンテナの起動を確認します。

$ docker ps --format "table {{.Names}}"
NAMES
project_name_nginx_1
project_name_php-fpm_1
project_name_phpmyadmin_1
project_name_workspace_1
project_name_mysql_1
project_name_docker-in-docker_1

上記のように表示されればコンテナが起動できています。

お疲れ様でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EC2, Cloud9 composer create-project でメモリ足りない問題の対策

AWS EC2 や Cloud9 で composer create-project コマンドでLaravelをインストールする際メモリ不足で失敗する場合があります。

環境

  • OS: CentOS7.6

Linuxであれば同様の手順でSwapを設定できると思います。

エラー

$ composer create-project --prefer-dist "laravel/laravel=5.8.*" .
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details

Swapがないことの確認

Swapを確認する方法は3つあります。(他にもあったら教えてください)

free コマンド

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            989          71         633          12         284         718
Swap:             0           0           0

Swap が 0 になっていること

/proc/meminfo

$ cat /proc/meminfo
(一部省略)
MemTotal:        1013196 kB
MemFree:          648760 kB
MemAvailable:     735956 kB
Buffers:               0 kB
Cached:           208092 kB
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB

SwapTotal と SwapFree が 0 になっていること

/proc/swaps

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority

Swapが結果に出てこないこと

swapファイル領域を確保

$ sudo /bin/dd if=/dev/zero of=/swap bs=1M count=1024

1024+0 レコード入力
1024+0 レコード出力
1073741824 バイト (1.1 GB) コピーされました、 12.9409 秒、 83.0 MB/秒
$ ls -lh /swap
-rw-r--r--. 1 root root 1.0G  8月  4 05:52 /swap

1G分の領域が確保されました。

パーミッションを変更

$ sudo chmod 600 /swap
$ ls -lh /swap
-rw-------. 1 root root 1.0G  8月  4 05:52 /swap

rootユーザーのみ読み書きできるようにします。

swapの作成(ファイルシステムをswapにする)

$ sudo mkswap /swap

スワップ空間バージョン1を設定します、サイズ = 1048572 KiB
ラベルはありません, UUID=8bf61268-456b-4bd4-a9ac-9adf03415098

swapの有効化

$ sudo swapon /swap

Swapがあることの確認

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            989          68          80          12         840         718
Swap:          1023           0        1023

/proc/meminfo

$ cat /proc/meminfo | grep Swap
(一部省略)
MemTotal:        1013196 kB
MemFree:           82220 kB
MemAvailable:     735656 kB
Buffers:               0 kB
Cached:           768612 kB
SwapCached:            0 kB
SwapTotal:       1048572 kB
SwapFree:        1048572 kB

/proc/swaps

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/swap                                   file            1048572 0       -2

Laravelのインストールを再実行する

$ composer create-project --prefer-dist "laravel/laravel=5.8.*" .

問題なくインストールできればokです。

Swap領域の無効化

$ sudo swapoff /swap
$ sudo rm /swap

Swap領域を残しておくとそれだけディスク容量を使ってしまうので、今度はディスク足りない問題が発生するかもしれません。(デフォルト8GBだったと思うので)

今回はSwap領域を無効化、Swapファイルの削除をしておきましょう。

補足

swapの永続化

システムを再起動した場合、swap領域が無効化されてしまいます。
永続化するためには、viなどで /etc/fstab を開き下記の1行を追記する必要があります。

/swap swap swap defaults 0 0

今回は composer create-project コマンド実行時にエラーとなったので、インストールできたらswapは不要になるので永続化の必要ありません。

参考記事

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む