- 投稿日:2019-08-04T23:23:52+09:00
Leanpub で Laravel 入門チュートリアルの電子書籍版を作りました。
技術ブログに公開している『入門 Laravel チュートリアル(全11回)』を、電子書籍版にまとめました
![]()
書籍ページ
https://leanpub.com/laravel-primerLeanpub という電子書籍作成〜販売プラットフォームを利用しましたが、公開までのフローがかなりモダンで低ハードルでしたので、本の宣伝も兼ねて紹介したいと思います。
Leanpub
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.txtchapter1.md chapter2.md chapter3.mdこれだけで、マークダウン中の
h1やh2を読み取り、目次を自動生成してくれます。(2)
GitHub にリモートリポジトリを用意します。リポジトリは private で構いません。Collaborators に Leanpub ユーザーを追加する必要があります。これにより、Leanpub 側で更新内容を取得できるようになります。
(3)
本の内容は Markua という独自記法のマークダウンで記述します。独自記法と言っても、ほとんど普通のマークダウンです。大きく違うところは生の HTML は使えないくらい。書けたらリモートリポジトリにプッシュします。
(4)
プレビュー版は、Leanpub の管理画面からボタン一つで出力できます。
PDF / EPUB / MOBI 版がそれぞれ出力されます。(5)
公開も、プレビューと同様にボタン一つです。
表示画像をアップしたり値段を決めたり紹介文を書いたりしてから、公開します。いかがでしょうか。本当に公開まではこれだけでした。
静的サイトジェネレーターみたいなノリで電子書籍が出せてしまいましたもちろん、プラットフォームとしては Amazon の方が圧倒的にオーディエンスが多く広いでしょう。ただ、手軽さでは Leanpub に軍配が上がると思います。
(技術書は必ずしも広く一般にリーチする必要もないでしょうし…。)
エンジニアが情報発信をして対価を得るチャネルとしてもっと知られて、日本語のコンテンツも増えるといいなーと思うので、この記事で少し興味をもってもらえると嬉しいです。
そして、Web 開発者の皆さんは、こちらの本もぜひチェックしてください!
![]()
https://leanpub.com/laravel-primer
以上です。
- 投稿日:2019-08-04T22:10:32+09:00
laravelで外部ファイルを使用してcssを適用する手順
laravelでcssを適用する時に躓いたので、メモをします。
/public/css/にcssファイルを作成します。例としてstyles.cssという名前で作成したとします。
viewファイルに以下の一文を記述します。
<link rel="stylesheet" href="{{ asset('css/styles.css') }}">
httpsで表示するページなら、assetの部分がsecure_assetになります。
- 投稿日:2019-08-04T21:56:16+09:00
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-iconfontvuetify1.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" } }
- 投稿日:2019-08-04T13:56:44+09:00
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の内容に従ってビルドを行います。
なのでworkspaceのDockerfileを探します。# カレントディレクトリを確認 $ 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 ]などとして該当箇所を検索します。DockerfileRUN 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上記のように表示されればコンテナが起動できています。
お疲れ様でした。
- 投稿日:2019-08-04T06:13:54+09:00
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 detailsSwapがないことの確認
Swapを確認する方法は3つあります。(他にもあったら教えてください)
free コマンド
$ free -m total used free shared buff/cache available Mem: 989 71 633 12 284 718 Swap: 0 0 0Swap が 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 kBSwapTotal と SwapFree が 0 になっていること
/proc/swaps
$ cat /proc/swaps Filename Type Size Used PrioritySwapが結果に出てこないこと
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 /swap1G分の領域が確保されました。
パーミッションを変更
$ sudo chmod 600 /swap $ ls -lh /swap -rw-------. 1 root root 1.0G 8月 4 05:52 /swaprootユーザーのみ読み書きできるようにします。
swapの作成(ファイルシステムをswapにする)
$ sudo mkswap /swap スワップ空間バージョン1を設定します、サイズ = 1048572 KiB ラベルはありません, UUID=8bf61268-456b-4bd4-a9ac-9adf03415098swapの有効化
$ sudo swapon /swapSwapがあることの確認
$ 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 -2Laravelのインストールを再実行する
$ composer create-project --prefer-dist "laravel/laravel=5.8.*" .問題なくインストールできればokです。
Swap領域の無効化
$ sudo swapoff /swap $ sudo rm /swapSwap領域を残しておくとそれだけディスク容量を使ってしまうので、今度はディスク足りない問題が発生するかもしれません。(デフォルト8GBだったと思うので)
今回はSwap領域を無効化、Swapファイルの削除をしておきましょう。
補足
swapの永続化
システムを再起動した場合、swap領域が無効化されてしまいます。
永続化するためには、viなどで/etc/fstabを開き下記の1行を追記する必要があります。/swap swap swap defaults 0 0今回は
composer create-projectコマンド実行時にエラーとなったので、インストールできたらswapは不要になるので永続化の必要ありません。参考記事

