TIPS」カテゴリーアーカイブ

Laravel Snappy でヘッダに日本語が使用できない件

Laravel で PDF 生成に便利に使える Laravel Snappy だけど…。ヘッダ、フッタに日本語(マルチバイト文字)を使おうとすると該当部分が表示されないという問題が生じた。

普通ならこうする。

でもこれじゃあダメなんである。

ググってみると同じ問題に直面した海外ニキがいて、その投稿によるとheader-left ではなく header-html にしてHTMLを埋め込めばいいらしい。

viewname.header.blade.php の中身はこう。

重要なのはDOCTYPE、charset=utf-8の指定、margin0の指定であった。

Laravel Snappy を使ってPDFを生成してみる

wkhtmltopdf のPHPラッパー Snappy を Laravel に組み込んだ Laravel-Snappy を使ってみる。

インストール

公式の README に目を通しておくといい。

app/snappy.php を編集して、実パスへの位置を定義。
.env に定義があればそれを、無ければ Composer のデフォルト位置を指定。

追加ライブラリ入れる

The exit status code ‘127’ says something went wrong: stderr: “/var/www/html/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory

とか出た場合。メッセージの通り、ライブラリがない。
dockerイメージに libXrender が含まれないので、これを追加する。

/docker/Dockerfile の apt-get install な列に一行追加。

(autoremove の直前でいいと思う)

ついでに日本語フォント(IPAフォント─素晴らしいプロジェクトですよね)も入れておく。

使ってみよう

Hタグを入れると目次も自動で作ってくれる。スゴイ!

日本語が文字化けするんだが?

html 内の meta タグで utf8 を指定する。

PDF::loadFile(url)で外部サイトを読み込むとSSL絡みのエラーが出るんだが?

調べてみたところ、ライブラリの問題でバージョンアップするしか無さそう。しかしメンテナが手を離してしまってるみたいで、SSLのバージョンを落とすか(無意味)か、自力で wkhtmltopdf のバージョンを 0.12.5 以上に上げるしかないらしい。厳しい。

WordPressのURLを変更したら記事が404エラーになっちゃったよ

開発用WebサイトのURLを変更したら、入れといたWordpressデモサイトが起動しなくなった。
今回は以下の手順で修正できた。

WordPress インストールディレクトリ直下の wp-config.php をテキストエディタで開き、以下の二行を追加。
(念の為バックアップをとっておこう)

これでトップページが開き、管理用ページにも入れるようになった。

が、特定のページを開くと404エラーになってしまう。
これはパーマリンクのリダイレクトルールがあべこべになっているかららしい。

管理用ページから「設定→パーマリンク設定」と移動し、何も変更せず「保存」ボタンを押すとリダイレクトルールが再設定される。
(.htaccess を修正する方法もあるらしいが、こちらのほうが確実だった)

ピュウ!焦ったぜ…

Kubuntu 20.04 LTS(Focal Fossa)がリリース

KDEの「重い」という印象から敬遠してたけど、ちょっと試してみたらすっかり気に入ってメインのLinuxディストリビューションとなっている。

kubuntu

Kubuntu 20.04 LTS(Focal Fossa)

”デフォルトではシンプルで、必要なときに強力”な kubuntu のLTSが2年ぶりにリリースされた。
ざっくり変更点は以下。

  • コアパッケージの更新
  • Linuxカーネル5.4ベース
  • デスクトップ環境が KDE Plasma 5.18 LTS に
  • 音楽再生ソフトのデフォルトが Elisa から Cantata に
  • メーラーのデフォルトが kmail から Thunderbird に
  • その他のアプリケーションアップデート

順当なアップデートという感じ。
やはり Kubuntu としては最大の関心事は KDE Plasma 5.18 であろう。

KDE Plasma 5.18 LTS

  • 絵文字ファインダー追加(Win+ピリオド)
  • GTKアプリケーションのサポート強化(KDEの外観を可能な限り引き継ぐ)
  • ナイトカラー機能追加(なかったっけ??)
  • 通知機能強化1:Bluetoothデバイスの電力不足を通知
  • 通知機能強化2:ダウンロードしたファイルへのアクセスを追加
  • システム設定の機能強化
  • アプリケーションスタイルのカスタマイズ
  • ウィンドウアニメーション効果のカスタマイズ

一般ユーザとして気になるところは外観スタイルのカスタマイズが強化されたところか。
Windows 9Xスタイルを適用することで、昔のWindowsにもかなり近づけることができるようになった。(ニーズはともかく…)

見た目と操作感がとってもモダンで、操作してて気持ちいいので、見た目に抵抗がなければぜひ試してみてもらいたい。

ダウンロードはこちらから

ダウンロードしたISOで LiveUSB を作るのが手っ取り早い。
ソフトとしては Rufus がある。ありがたく使わせて頂こう。

AWS(Amazon Route 53)に独自ドメインを設定する

AWSに独自ドメインを設定したときのメモ。
Amazon Route 53 はクラウド上でDNSサーバを提供してくれるウェブサービス。
ただし今のところ日本語化されていないので、操作性にちょっと難あり。
(当たり前だけど従量課金されるので注意してね)

  • EC2インスタンスは作成済み。
  • Elastic IP(グローバルIP)取得済み。
  • 独自ドメインは他レジストラで取得済み。

まずAWS管理コンソールにログイン。

サービス一覧から「Route 53」を選択。

「DNS Management」に入り、「Create Hosted Zone」を選択。

「Domain Name」に取得済みドメインを入力。sample.comなど。
「Comment」は適当に。 「Type」は「Public Hosted Zone」。
「Create」ボタンを押すとゾーンが作成される。

次にレコードを作っていく。
メニューから「Go To Record Set」を選択。
デフォルトで NSレコード と SOAレコード が作成されている。
(コレをいじくるんじゃねぇぞ、とチュートリアルに書いてあるので触らないでおきます)

「Create Record Set」をクリック。

「Name」にサブドメイン名。 まずは空白でよい。
「Type」はIP-V4。 V6にするときが来るんだろうか・・・。
「Alias」は「No」、「TTL」はデフォルトのままで。
「Value」に取得済みの Elastic IP を入力。
「Routing Policy」は「Simple」に。 他のは課金コース。
「Create」ボタンを押すとAレコードが作成される。

ここまでで名前が引けるようになっているはず。

AWSからレンタルサーバに移行した話

諸事情でAWSからレンタルサーバに移行したので、その顛末を記しておく。

状況

地方の小さなプロダクトで、小規模なブランドページを企画した。
予算も限られているということで、ほかのプロダクトも展開していたAWS上で構築。
単発の品物だったので、運用期間は数年程度を予定していた。

あまりないケースかもしれないが、低予算で目標達成したらごほうびがもらえる、とイメージしてもらいたい…。

単なるWebサイト(Wordpress)ということで、比較的非力なEC2サービスをチョイスした。
独自ドメインを一応とり、サービスイン。

しばらくはぽつぽつとアクセスがある程度で、とくに問題なかった。

異変

とある時期を堺に、使用量がじわじわ上がってきた。
ありがたいことに多少話題になったようで、アクセス数が上がってきたらしい。

で、そうなってくるとAWS特有の「使ったぶんだけ課金」というのが響いてくる。
アクセスが大いに越したことはないのだが、実験的な側面もあり予算が決まっているのがネックであった。

このままいくと予算をぶっちぎっちゃうカモ…?

対策してみる

ec2サービスの利用料を圧縮するために、しばらく経ってからリザーブドインスタンスを導入した。
その名の通り、EC2の使用を予約し、利用料を値引きしてもらうシステムである。
(今思えば、数年運用する計画だったのだから最初からやっておけば良かったのだが…)

リザーブドインスタンスを購入してEC2の運用コストを下げる

ちょっとマシになったけど…

そのときはEC2の利用料が大半だったので、予算内に収まるよう調整できた。
よかったよかった、これで計画通り、実験的にも成功といえそうだ。

…ところが、ここからさらにハネてしまい、EC2利用料でなくデータ転送量が料金の大半を占めるようになってしまった。
しかも、ピークタイムになるとアクセス過多のため、メモリ不足でapacheかmysqlが落ちることも。

完全に当初の想定アクセス数を上回ってしまう状況になってしまった。(本来ならありがたいことだが…)

困ったなぁ

さて、当座の対処としては、apacheとmysqlが落ちないようにしなければならない。
調整を入れたり、SWAP領域を多めに確保するなどしてみた。

スワップファイルの設定については公式サイトが詳しい。

スワップファイルを使用して、Amazon EC2 インスタンスのスワップ領域として動作するようにメモリを割り当てる

なんでSWAP領域がないねん…と思ったけど、ディスクIOで課金される以上、AWS側としては勝手にSWAP領域を設定するのはマズいやろ、ということらしい。必要なら覚悟の上で自分で設定してね、というスタンスなのだろう。

公式がわざわざ「注意: スワップ領域は、エフェメラルストレージのインスタンスストアボリューム上にのみ作成することをお勧めします。」と書いてあることに注意していただきたい。

エフェメラル(ephemeral:一時的な)ストレージは再起動するたびにクリアされるストレージのことである。
そのかわり、ここへのディスクアクセスについては課金されない。

前述したとおり、今回チョイスしたEC2インスタンスタイプは低価格帯であったため、インスタンスストアボリュームが存在しなかった。
ディスクアクセスによって課金されることを知りながら、スワップファイルを高価なEBS上に作成しなければならない、このストレス!

Apacheの調整とスワップファイルを設定したことで落ちなくはなったが、ディスクIOで予算を使い切ってしまう未来しか見えない。
なんらか対策が取れるのかもしれないが、それをやってる時間がないくらい、データ転送量もえらいことになっていたのだ。

多数使用していた画像を圧縮してみたりしたが、仮にもブランドサイトなので限界がある。

もぅマヂ無理…移行しよ…

ローコストでスタートできる、というウリでAWSをチョイスしたのだが、(うれしいことに?)アクセス過多で負荷が高まり、結局立ち行かなくなってしまった。

無難に安く仕上げるつもりが、クラウド破産に怯えるハメに。なにやってんだ??(ヽ´ω`)

こういうとき予算があればインスタンスタイプを変更することで対応できるのだろうが、今回は諸事情でそうはいかなかった。
リザーブドインスタンスも無駄になるしね…。

というわけで、「一日の」データ転送量に比較的余裕のあるレンタルサーバに移行することにした。
一日の、というのがミソで、くだんのWebサイトではスパイクはそれほど発生しておらず、一日あたりで見てみれば十分おさまる範囲であったのだ。

じっくり考えている余裕はあまりなかったので、とりあえずさくらのレンタルサーバとロリポップの2件に絞った。

値段は2019年12月調べ。

さくらインターネット

ライトプランは131円からと、とにかく安い。

スタンダードプラン(月額524)

一日あたりの転送量:80GB

プレミアムプラン(月額1571)

一日あたりの転送量:120GB

ロリポップ!

さくらの間隙を縫うようなプラン設定。
ハイスピードだとストレージがSSDでリッチ。

スタンダードプラン(月額500~)

一日あたりの転送量:100GB
ストレージ:HDD

ハイスピードプラン(月額1000~)

一日あたりの転送量:100GB
ストレージ:SSD

あれ…すっげー安い。

どちらにしたかはここではあえて申し上げますまい。
とにかく、今回のケースにおいてはAWSよりレンタルサーバのほうが遥かに安く上がった、ということである。

そのほか、各種アップデートを気にしなくてよくなった。
プロセスが落ちることを気にする必要もない。
VPSのように自由度はないが、「任していい部分」を任せられるのが楽だ。

さらにおまけでいうと、独自ドメインのメールアドレスが作れたのがお客さんにやたらとウケた。
メールサーバまで構築するのはちょっと合わなかったので作ってなかった。
(最初いらない、と言ってたんだけど…)

AWSのメリット

不勉強が招いたこと&使い方が合わなかっただけで、AWSをディスる意図はない。
実際にやってみて知見を得、ここには記せないことも色々体験できたのは良かった。

AWSは

  • すぐにインスタンスを作成でき、不要なときは停止できる開発サーバ
  • ある程度予算を確保できるプロダクト

に使うべきかなと思った。

WordPressお引越し:URLのリダイレクト(Redirectionプラグイン編)

諸事情でWordpressを引っ越した。
URLが変わってしまったので、リダイレクトの設定を行う。

スクリプトを使うなど、リダイレクトの方法にはいくつか種類があるが、今回はちゃんとブラウザにリターンコード301を返したうえで転送を行いたい。
これをやっておけば、旧URLへの(雀の涙の)リンクもGoogle先生がちゃんと書き換えてくれるそうだ。
(詳しくは301リダイレクトを参照)

プラグイン Redirection を使う

htaccessでやるのもいいが、せっかくなのでWordpressのプラグインを使ってみる。
調べてみると、「Redirection」というのが良さそうだ。

Redirection

インストールして有効にしておく。
旧サイトに、だぞ!

設定

変わったのはURL部分だけなので、ページへのアクセスをまるっと転送することにする。

ソースURL:^(.*)
ターゲットURL:新ドメイン/$1
正規表現ON

正規表現について語ると丸一日かかるのではしょる。
すっげー便利なので知らない人は調べてみてね。

とにかく ^(.*) で「旧URLへの全てのアクセス」となる。
「その条件にマッチした部分」が $1 になる。

大雑把な設定ではあるが、以上の設定で旧サイトへのアクセスはすべて、ドメイン部分を書き換えた上で新サイトに転送される。

実際にテストして転送されればOK。
ちなみに管理ページへのアクセスは転送されないようだ。賢い!

DELL Vostro SSD換装

DELL Vostro SSD換装。

お客さんとこでよくみる、意外と壊れないアレ。

BTO製品だけあって、詳しくない人でも部品交換しやすいようによく考えられている。

SSDを取り付けるにはマウンタが必要なので忘れずに。

本体のカバーはネジ二箇所で止まっているだけだ。
ネジを外して後ろ向きにスライドさせるとカバーが外せる。

HDDだけ取り外したところ。
HDDのマウントがネジで固定されておらず、青い矢印パーツの指示通りに力をかけるとするっと外せる。

青いパーツとHDDもネジ止めされていない。
青い出っ張りで挟み込んでいるだけだ。
強度は若干心配ながら、実際問題これで十分なんだろう。

ツメ部分を外側に倒せば隙間ができてHDDが取り外せる。
(古い機種だと劣化して折れるかもしれない。力の入れ方には気をつけて)

HDDを取り外し、SSDをくっつけたところ。
前述したように、マウンタと青いパーツは突起で固定されている。

電源ケーブルの長さにあまり余裕がないので、できるだけ手前側(写真右側)にSSDを取り付けるといい。

東芝 dynabook T554 SSD換装

東芝 dynabook T554 SSD換装。

見たこと無い方法でHDDを固定してたりするが、やってみるとそれほど難しくはなかった。

今回使用したSSDはこちら。
元々1TBのHDDだったが、使用率が低かったので512GBのSSDに変更した。

本体裏のネジを外していく。

適当に丸を付けてみたけど、これ以外にもあるかも。

メモリ取り付け用パネルの裏側にもネジがある。
紛失防止のためか、メモリ取り付け用パネルのネジは外せなくなっている。

白いコネクタを外す。
ケーブルを触ると断線の恐れがあるので、白いコネクタ部分をピンセットなどで押し上げるようにして外す。優しくね。

マルチディスクドライブを外す。

ネジを外して外向きにスライドするとそのままはずれる。
外したドライブの下にも浅ネジがあるので外す。

全部外し終わったら、天板を外す。
他メーカーほどツメでガッチリ止まっているわけではないので、隙間にカードを挟むなどしていくと案外簡単に外れる。
(もしツメが折れてもネジで固定するので大丈夫)

天板が外れたらHDDの取り外しにかかる。
リボンケーブルがHDD固定具のゴムパーツにはさまってるのを確認する。
もとに戻すときに忘れないように。

上に持ち上げればすんなり外せる。

ゴムのパーツは本体の金具に上から刺さるような感じで固定されている。

普通ネジなどで止めると思うんだが、独特。
衝撃緩和も兼ねているのだろうか。

このコネクタの反対側に、HDDのコネクタがある。
外側にスライドするように外す。

外せた。

向きに注意しながらSSDを取り付ける。
リボンケーブルを元通り挟み込むのを忘れずに。

あとは逆の手順で取り付ければOK。
メモリパネルのコネクタを接続し忘れないように。

PS4コントローラのゴム交換

PS4コントローラ(Dual Shock 4)の十字キーがギチギチした感じになってしまったので、掃除もかねてゴムパッドの交換をしてみた。

PS3のコントローラよりよっぽど簡単だった。

替えゴムは色々あったけど、これをチョイス。

これ以外にドライバーとピンセットがあると作業しやすい。

まず4つのネジを外す。ネジ山をナメないように慎重に。

ネジを4ヶ所外したら、ニギリの部分をずらして隙間を作る。

隙間にマイナスドライバーなどを突っ込んで隙間を広げる。
ツメがあるので、折らないように注意。
(まぁ別に折れてもネジで止めるので影響は少ない)

パカッ!

左のリボンケーブルと右のバッテリーケーブルを外す。

左のリボンケーブルは刺さってるだけなので抜けばOK。方向があるので写真でも撮っておくべし。

右のバッテリーケーブルは抜くのが結構大変なので注意。
ケーブルを持って抜くと断線する恐れがあるので、白い部分をつまんで引き抜く。

バッテリーケーブルを抜いたらバッテリーを取り外す。
バッテリー台はネジで止まってるので、これも外す。

最後。スライドパッドのリボンケーブルを抜く。ピンセットなどで引っ張るとやりやすい。
これも方向があるので注意。
穴を通って基盤に刺さっているのを覚えておく。戻すときも同様に。

あとは問題の箇所を交換して、もとの手順で戻すだけだ。
ケーブルの方向に気をつけよう。