PG WORKS

PHPやLinux(サーバー)などのノウハウや、便利なツールを紹介していきます。

コーディングの命名規則

複数人でソースコードを共有しながらの開発は経験が少ないため、どんな命名規則をつけているのか、githubで公開されているコードや命名規則一覧を公開しているサイトを参考にしながら開発をしています。

コーディングの命名規則一覧 | murashun.jp

データ操作系の命名規則が公開されています。
命名時のポイントも具体的に書かれているため参考にさせていただきました。


昔は辞書から意味を調べて関数や変数名を作っていましたが、長い単語のまま使い、あとから見返してわからなくなることも。。。

なので

ネーミングセンスが皆無な私には、よく下記のサイトを参考にしています。

codic - プログラマーのためのネーミング辞書

YouTubeのエンジニアチャンネルさんで公開されている「【初心者向け】クソコードを書かないためのテクニック5選」の内容を見て、関数の名称の意味がわからなかったり、取得がなぜか更新する関数も入ってたりと、私も最初の頃は、同じ間違いをしていたので改めて勉強になりました。

youtu.be

複数人での開発するプロジェクトは、経験者のソースコードが見れる機会もあるかと思うので、命名規則やコーディングスキルが飛躍的に上がりやすい環境なので、他人のソースコードを見る機会も増やすと面白いかと思います。(難関すぎてなにやってるかわからないのもありますが。。。

【Vue warn】Failed to resolve directive: lazy

github.com

昨日(2022年6月2日午前中)辺りからエラーが表示され使えなくなりました。
vue-lazyload.jsのバージョンを1.3.3に指定すると正常に動作しました。

//変更前
<script src="https://unpkg.com/vue-lazyload/vue-lazyload.js"></script>
//変更後
<script src="https://unpkg.com/vue-lazyload@1.3.3/vue-lazyload.js"></script>

今まで使えてたのが急にv-lazyで指定している箇所全てエラーになってかなり焦りました。(v-lazyの箇所srcに戻しちゃったよ。。。)

【無料レンタルサーバー】気になる箇所を調査

無料のレンタルサーバーがどこまで使えるのか気になったので、
重要そうな箇所を書いてみました。(こちらも随時あればこの記事を更新していきます。)

調べて思ったのは、やはり実運用はできないと思いました。
(SSLが使えないとデータをPOSTしたときに、非暗号化された状態でデータが送られてセキュリティ面やSEOに影響あるため)
個人で使ったりテストで利用する程度になるかと思います。

XFREE(エックスフリー)

https://www.xfree.ne.jp/

  • サーバー容量(1G~2G)
  • 独自ドメイン設定可(個数制限有り)
  • MySQL(データベース5個まで可能)
  • データベースの容量(50M~100M)※1
  • WordPress設置可能プラン有り
  • SSL設定不可(サイト運用には向かない)
  • 広告有り
StarServer Free(スターサーバーフリー)

https://www.star.ne.jp/free/

XREA Free(エクスリア フリー)

https://www.xrea.com/

  • サーバー容量(1G Web&メール&データベース含めて)
  • 独自ドメイン設定可(10個まで)
  • メールアカウントが設定可能※2
  • MySQLPostgreSQL(各データベース1個まで?)
  • SSL設定有り
  • SSHが利用可(CRONは使えない)
  • 転送量上限 1 GB / 日※3
  • 広告有り

※1 容量が少ないため履歴がたまる系のプラグインやブログ運用には向かない
※2 容量が1Gしかないためスパムメールが大量に送られるとすぐ埋まるかも
※3 XFREEには記載が見当たらないが制限あるかも

【CentOS7】Apache2.4 PreforkからEventMPMに変更手順

久しぶりの更新!
CentOS streamやらAlmaLinuxなど、CentOSの後継がリリースされている中、いまだにCentOS7使ってます。

既存の環境を移行が大変なのでしばらくは7のままかも。

今回は、ApacheのモジュールPreforkの限界を感じつつあるので、EventMPMについて調べてみました。
わからない部分もありますが(検証中と記載した部分)、都度修正していきます。

モジュールの変更
vi /etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#↓
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

#LoadModule mpm_event_module modules/mod_mpm_event.so
#↓
LoadModule mpm_event_module modules/mod_mpm_event.so

このままApacheの再起動しても、PHPが動かなくなるため、PHPが動作する環境にします。

PHP-FRMのインストール
#PHPのバージョンに合わせる(例ではPHP7.2)
yum install --enablerepo=remi-php72 php-fpm

#PHP-FPMの起動
systemctl start php-fpm

#サービス自動起動
systemctl enable php-fpm
バーチャルホストの設定追加(例:DocumentRoot /var/www/html/)
ProxyPassMatch ^(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1 disablereuse=on
SetEnv proxy-nokeepalive 1
MPMの設定追加
vi /etc/httpd/conf.d/mpm.conf

#↓設定値はサンプルです。
<IfModule mpm_event_module>
  StartServers 32
  ServerLimit  500
  ThreadLimit  1000
  ThreadsPerChild 1000
  MinSpareThreads 100
  MaxSpareThreads 1000
  MaxRequestWorkers 12000
  MaxConnectionsPerChild 500
</Ifmodule>
PHP-FRMの設定
vi /etc/php-fpm.d/www.conf

#apache以外で設定していた場合変更(例:sample)
user = apache
group = apache
↓
user = sample
group = sample

#子プロセスの最大数を変更(検証中)
;pm.max_children = 50
↓
pm.max_children = 500

#プロセス再起動値(検証中)
;pm.max_requests = 500
↓
pm.max_requests = 1000

#memcachedを利用している場合変更
;php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session
↓
php_value[session.save_handler] = memcached
php_value[session.save_path]    = "「IP:ポート」"

#設定反映
service php-fpm reload

#設定ファイルにエラーがないか確認
service httpd configtest

#Apacheの再起動(ここでEvent MPMに切り替わります)
service httpd start
設定確認
#prefork OR Event MPMで動作しているか確認
httpd -V

#PHP-FPMのプロセス数
ps aux | grep php-fpm | grep -v grep | awk '{print $6, $10, $11}'

#php-fpmのプロセスの件数
ps aux | grep php-fpm | grep -v grep | awk '{print $6, $10, $11}' | wc -l

#1プロセス辺りのメモリ使用率
ps aux | grep php-fpm | grep -v grep | grep -v master | awk '{sum+=$6} END {print sum/NR}'

【Swift】iOSアプリ開発メモ

iOSアプリ(ゲーム以外)で良いところ&審査に出す前に注意する点をまとめてみました。

プロジェクト内にPodファイルを設定&設置してインストールコマンド(pod install)をながすことで利用できる。

・例)podファイルの中身
――――――――――――――――――
platform :ios, '11.0’

target ‘sampleproject’ do
use_frameworks!

pod 'Alamofire'
pod 'SDWebImage'

end
――――――――――――――――――

Alamofire:ウェブサイトとの通信で利用
SDWebImage:URLから画像を取得するのに利用

info.plist

必要な機能だけ許可したほうがいいですが、ないとアプリがリジェクトされます。
WKWebViewを使うアプリなら下記の機能は使うかも。
Privacy - Camera Usage Description
↑カメラへのアクセス許可
Privacy - Location When In Use Usage Description
↑位置情報取得のアクセス許可
Privacy - Microphone Usage Description
↑マイクへのアクセス許可
Privacy - Photo Library Usage Description
↑カメラロール内を読み込み
Privacy - Photo Library Additions Usage Description
↑カメラロールに保存
Bundle version string (short)
↑アプリを更新するたびに数値を上げる
1.0->1.1->1.2など

↓参考サイト様
https://neos21.hatenablog.com/entry/2018/06/18/080000

Deployment -> iOS Deployment Target

↑アプリが動作するiOSのバージョンを設定
他のアプリの対応バージョンを見て合わせたほうが良い。

アプリの審査

使用用途がわからないアプリの場合「App Reviewに関する情報」の所に詳細やテスト方法(ログインが必須であればログイン情報)を記載する。

他社のサイトをアプリ内に表示する場合、許可が取れている証明を説明する必要があります。

掲示板などユーザーが自由に書き込めるコンテンツがアプリ内にある場合、第三者が通報できる機能や、速やかに削除ができる対策が取られているかの確認があります。(利用規約必須です)

また、特定の単語(流行り病など)が入ってるとリジェクトされるため全て置き換えるor削除する必要があります。

アプリがクラッシュしたり、見れない画面があると確認が入ります。スクリーンショットは実際に表示されるものが必須(多言語対応している場合、言語ごとにスクリーンショットが必要)

審査通過後

スクリーンショットなど概要欄にある文章も修正もできないため再審査が必要。

審査期間

通常1~2日ほど(朝~昼に審査に出せば次の日の朝には結果が分かりました)

TestFlight

こちらも審査に1~2日ほどかかる。通知のテストが本番と同じ環境でテストできるため(リリース前に確認が可能)

その他

AdMobを使う場合「マーケティングURL」にサイトURLを設定する。

感想

審査チームはアプリの全てをチェックしているとは思えない。(例えば通知部分にバグがあっても通過する)アクセス許可の部分やコンテンツの内容をチェックしているかと思います。

リジェクトされると、英文で何がダメなのか書かれてあるが、Google翻訳で問題なし。添付画像を送ってもらえるパターンもあり。

返信する際には、英文(Google翻訳)と日本語の両方つけて送信しているが、話が通じないなどは今までになかったです。

メタデータの修正であれば、アプリを再度提出する必要はありません。
また修正してないのに審査チームの文面を無視して再申請するとアカウント停止になる可能性があるため必ず返信すること。

通知機能がある場合、年1で証明書の更新が必須(証明書を発行するためにはmacが必要になります。)