2017年4月17日月曜日

yum updateがエラーで失敗する

yum_updateyum updateをしたらエラーになったので対処しているときの覚書。なぜか開発サーバーでは成功する。

環境: CentOS7, YUM 3.4.3

エラー
# yum update

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in <module>
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 370, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 179, in main
    result, resultmsgs = base.doCommands()
  File "/usr/share/yum-cli/cli.py", line 573, in doCommands
    return self.yum_cli_commands[self.basecmd].doCommand(self, self.basecmd, self.extcmds)
  File "/usr/share/yum-cli/yumcommands.py", line 504, in doCommand
    ret = base.updatePkgs(extcmds, update_to=(basecmd == 'update-to'))
  File "/usr/share/yum-cli/cli.py", line 1025, in updatePkgs
    self.update()
  File "/usr/lib/python2.7/site-packages/yum/__init__.py", line 5114, in update
    updates = self.up.getUpdatesTuples()
  File "/usr/lib/python2.7/site-packages/yum/__init__.py", line 1093, in <lambda>
    up = property(fget=lambda self: self._getUpdates(),
  File "/usr/lib/python2.7/site-packages/yum/__init__.py", line 838, in _getUpdates
    self._up = rpmUtils.updates.Updates(self.rpmdb.simplePkgList(), self.pkgSack.simplePkgList())
  File "/usr/lib/python2.7/site-packages/yum/__init__.py", line 1074, in <lambda>
    pkgSack = property(fget=lambda self: self._getSacks(),
  File "/usr/lib/python2.7/site-packages/yum/__init__.py", line 778, in _getSacks
    self.repos.populateSack(which=repos)
  File "/usr/lib/python2.7/site-packages/yum/repos.py", line 347, in populateSack
    self.doSetup()
  File "/usr/lib/python2.7/site-packages/yum/repos.py", line 158, in doSetup
    self.ayum.plugins.run('postreposetup')
  File "/usr/lib/python2.7/site-packages/yum/plugins.py", line 188, in run
    func(conduitcls(self, self.base, conf, **kwargs))
  File "/usr/lib/yum-plugins/fastestmirror.py", line 202, in postreposetup_hook
    all_urls = FastestMirror(all_urls).get_mirrorlist()
  File "/usr/lib/yum-plugins/fastestmirror.py", line 369, in get_mirrorlist
    self._poll_mirrors()
  File "/usr/lib/yum-plugins/fastestmirror.py", line 413, in _poll_mirrors
    pollThread.start()
  File "/usr/lib64/python2.7/threading.py", line 746, in start
    _start_new_thread(self.__bootstrap, ())
thread.error: can't start new thread

「yum clean all」を試してもダメ。

検索してみると下記サイトが参考になった。

fastestmirrorを無効にする。
# less /etc/yum/pluginconf.d/fastestmirror.conf

[main]
enabled=0

これでyum updateすると成功。

 

< Related Posts >

2017年4月3日月曜日

Google検索とアプリを紐付けるApp Indexing(ディープリンク)を設定(書きかけ)

search_appGoogle検索結果にアプリがあることを通知するディープリンクを設定したときの覚書。

公式サイトの手順が分かりやすい。

 

目次

  1. Google Search Consoleにアプリを追加
  2. サイトと関連付ける
  3. 「Fetch as Google」を実行
  4. アプリ内のページをインデックスに登録する(未実装)

 


1.Google Search Consoleにアプリを追加

公式ヘルプを参考にSearch Consoleにアプリを追加

同じアカウントでアプリを管理しているので、追加自体はすぐに完了する。

 


2.サイトと関連付ける

メッセージにある「検索パフォーマンスを改善できます」から「ウェブサイトと関連付ける」をクリックして、ランディングページを関連付けた。

 


3.「Fetch as Google」を実行

ディープリンクは設定してないけど、Fetch as Googleを試してみた。

英語版で実行すると「一部完了」。

一覧を取得するURLで「リソースが取得できませんでした」とエラーが出た。APIがアプリからのリクエストしか許可しない処理があるので、それが影響したのかもしれない。

日本語版で実行すると「内部エラー」。

この状態でも3日後に「検索アナリティクス」にはデータが表示されるようになった。

 


4.アプリ内のページをインデックスに登録する(未実装)

アプリがAppcelerator Titaniumで作っているので、これに手を付けれていない。

実装したら追記予定。

 

< Related Posts >

2017年4月1日土曜日

サイトのスピードテストと画像を最適化してスコアを上げる

制作したホームページのサイトスピードを計測したときの覚書。

環境: CentOS 7

 


1.サイトのスコアを計測

最近公開されたGoogle先生のテストツール

image

前からあるこちらのツールの方がより具体的な修正方法を提示してくれるので分かりやすい。

image

 


2.画像の最適化

Google先生の提案に従って画像を圧縮してみる。詳しくは公式サイトで。

CentOS7にjpegtranをインストール
# yum install libjpeg-turbo-utils

バージョンの確認
$ jpegtran -v

libjpeg-turbo version 1.2.90 (build 20140610)

ヘルプの確認
$ jpegtran -h

使ってみる。
# jpegtran -copy none -optimize -progressive -outfile key-visual_mini.jpg key-visual.jpg

640KBが635KBになっただけ。あまり効果がなさそうなので他の画像はそのままにした。

画像を切り出すときに使っていたGIMPがうまいこと圧縮してくれたのかもしれない。

 

< Related Posts >

2017年3月23日木曜日

CentOS7向けにwkhtmltopdfをソースからビルド

wkhtmltopdfYUM経由でインストールしたwkhtmltopdfがよく分からないエラーを吐くので最新版(0.12.4)をビルドしたときの覚書。

環境: CentOS 7

よく分からないエラー

/usr/bin/xvfb-run: line 181: 21759 Segmentation fault      DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1

 

目次

  1. YUMバージョンをアンインストール
  2. Git cloneしてコンパイル
  3. インストール
  4. YUMバージョン(0.12.1)と比較して変わったところ
  5. 本番環境へインストール

 


1.YUMバージョンをアンインストール

今のバージョンを確認
# wkhtmltopdf --version

wkhtmltopdf 0.12.1

アンインストール
# yum remove wkhtmltopdf

 


2.Git cloneしてコンパイル

公式サイトを参考に

コンパイラ(開発ツール)をインストール
# yum groupinstall 'Development Tools'

GitHubからダウンロードする。ユーザーのホームディレクトリじゃないとコンパイル時にエラーになるらしい。
# cd
# git clone --recursive https://github.com/wkhtmltopdf/wkhtmltopdf.git

5分ぐらい掛かった。

今の最新バージョン0.12.4をチェックアウト
# cd wkhtmltopdf/
# git tag
# git checkout 0.12.4

セットアップ(?)
# sudo scripts/build.py setup-schroot-centos7

エラー。CentOSのオプションはなくなったらしい。

再度ビルド実行
# scripts/build.py posix-local -clean

エラー

Basic XLib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /root/wkhtmltopdf/qt/mkspecs/linux-g++.

Qtに関連するライブラリが必要らしい。

YUMレポジトリからそれらしいのをインストール
# yum search qt
# yum install qt-devel qt-x11

再度ビルド実行
# scripts/build.py posix-local -clean

エラー

OpenSSL support cannot be enabled due to functionality tests!

OpenSSL系のビルドツールをインストール
# yum install openssl-devel

再度ビルド実行
# scripts/build.py posix-local -clean

エラー

fatal error: png.h: No such file or directory

fatal error: jpeglib.h: No such file or directory

pngとjpegのライブラリをインストール
# yum install libpng-devel libjpeg-turbo-devel

再度ビルド実行
# scripts/build.py posix-local -clean

大量のWarningが出て心配になる。

結構な時間が掛かる。

バイナリがstatic-build/posix-local/フォルダに出力される。

動作確認
# static-build/posix-local/wkhtmltox-0.12.4/bin/wkhtmltopdf https://dksg.co.jp test.pdf

 


3.インストール

コンパイルしたファイルを/usr/local/にコピー
# cp -r static-build/posix-local/wkhtmltox-0.12.4/* /usr/local/

/usr/local/libはデフォルトで未登録なので、読み込むように設定して再読込。
# echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
# ldconfig

ライブラリが読み込まれているか確認
# ldconfig -v | grep libwk

動作確認
# /usr/local/bin/wkhtmltopdf http://dksg.co.jp test.pdf

 


4.YUMバージョン(0.12.1)と比較して変わったところ

試してみて気付いたところ

  • xvfb-runが必要なくなった
  • 「--viewport-size」が使えるようになった
  • bootstrap3のnav-justifiedが潰れる(多分バグ)

 


5.本番環境へインストール

ビルドしたときにtar.xzが作られているので、これを本番サーバーへコピーする。

解凍
# tar -xvf wkhtmltox-0.12.4_local-vm-centos7.dksg.jp.tar.xz

/usr/local/にコピー
# /bin/cp -r wkhtmltox-0.12.4/* /usr/local/

ライブラリの登録と読み込み → 確認
# echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
# ldconfig
# ldconfig -v

動作確認
# /usr/local/bin/wkhtmltopdf http://dksg.co.jp test.pdf

システム上で確認出来たらYUMバージョンをアンインストール
# yum remove wkhtmltopdf

 

これで様子を見る。

 

< Related Posts >

2017年3月21日火曜日

Google Analytics認定資格を取得

google-analytics_certificationGoogle Analytics認定資格を取得したときの覚書。

参考サイト

Googleアナリティクスアカデミーの動画はほとんど英語なので、理解するのに時間がかかるかも。

 

Googleアナリティクスとは?を確認するのに有用な公式動画

 

用語集

用語 説明
セグメント アクセスを特定の条件で絞り込みカテゴリー分けする機能。
セグメントについて - アナリティクス ヘルプ
ディメンション データの属性。データの性質。セッションなどのアクセスそのものではなく「どんな」アクセスか。
例)市区町村、ブラウザ、言語
ディメンションと指標 - アナリティクス ヘルプ
マルチチャンネルレポート コンバージョン(CV)に至るまでの経路には、複数の接点(チャンネル:有料検索やディスプレイ広告など)があり、ユーザーはどのようなチェンネルを参照したかを解析
マルチチャネルについて - アナリティクス ヘルプ
アトリビューションモデル コンバージョン(CV)に至るまでの経路で、それぞれの経路がどの程度貢献したかを重み付けするルールセット
アトリビューション モデルの概要 - アナリティクス ヘルプ
アシストコンバージョン コンバージョン(CV)に至るまでの経路上の各接点
チャネルの貢献度を分析する - アナリティクス ヘルプ

Measurement Protocol

Google Analyticsへデータを送信するルールセット。ウェブやアプリ以外のSDKが提供されていない環境でも、このルールに従えばデータを収集することが可能。
Measurement Protocol - アナリティクス ヘルプ
テスト
(ウェブテスト)
A/Bテストを行う機能。テスト用ページを作成しておいて、指定した割合で訪問者にテストページを表示できる。
ウェブテストのメリット - アナリティクス ヘルプ
リマーケティング ユーザーリスト コンバージョンを達成する見込みが高く、再度アプローチしたいユーザー一覧。
AdWordsと連携前提。
Analyticsでユーザーリストを作成しておくと、AdWordsのターゲティングユーザーリストに表示される。
この機能に対応したAdWordsキャンペーンタイプを選択する必要がある。
リマーケティングの設定について - AdWords ヘルプ
ソリューションギャラリー セグメントなどの設定データをインポートできるツール。
他のアカウント(サイト)で作ったセグメント設定を共有するのに有用

 

試験自体は調べながら受験できるので難しくはない。失敗しても7日後に再挑戦できるので、自信を持って回答を選べるまで調べてから次へいくようにした方が勉強になると思う。

 

< Related Posts >

2017年3月20日月曜日

GoogleアナリティクスからGoogleタグマネージャに切り替え

google-tag-managerGoogleタグマネージャを使うと、Google AnalyticsやAdWordsのコンバージョンスクリプトをいちいち埋め込まずに管理できる。

最近は使いやすくなって本番運用に活用できる。

詳しくは公式サイトで。

 

出来ること

  • 任意のスクリプト(タグ)を任意のタイミング(トリガー)で実行することが出来る
  • トリガーを設定するときにCSSセレクタで指定できるので、IDがついてない要素もコードを修正せずにトリガーに出来る
  • プレビュー機能でどのトリガーが実行されたか分かる

 

特に便利だと思ったところ

  • 静的なリンクもコードを修正せずにGoogle Analyticsのイベントを発生させることが出来るから、特定要素のクリック数も簡単に計測可能。
  • プレビュー機能が素晴らしい

 

これからはGoogleタグマネージャを埋め込んでおけば間違いない。

 

< Related Posts >

2017年3月17日金曜日

【PHP】BMP画像をJpeg形式とWebP形式に変換

bmp_convert-to_jpeg_webpAndroidアプリから送信された画像がBMP形式なので、サーバー側でJPEGとWebPに変換したときの覚書。

環境: CentOS 7, PHP 7.0.16

 

目次

  1. AndroidとiOSのWebP対応状況
  2. サーバー環境の確認
  3. PHPのImagickを使って変換

 


1.AndroidとiOSのWebP対応状況

Androidは4.0以上でWebPに対応している。

iOSはiOS 10のSafariで対応しているが、アプリで表示させるためには別途ライブラリが必要。

iOSはjpeg、Androidはwebpを表示することにした。

 


2.サーバー環境の確認

YUM経由でImageMagickは前にインストールしてあったので、バージョンと対応フォーマットの確認
# convert --version

Version: ImageMagick 6.9.8-0 Q16 x86_64 2017-03-12

# convert -list format

WEBP* WEBP      rw-   WebP Image Format (libwebp 0.3.0[0201])

PHPから利用するためのimagickライブラリがあるか確認
# php -i | grep imagick

imagick module version => 3.4.3

 


3.PHPのImagickを使って変換

BMPからJPEGに変換するサンプルコード

$info = pathinfo($path);

$image = new \Imagick($path);
$image->setImageFormat('jpeg');
// Save as progressive jpeg
$image->setInterlaceScheme(\Imagick::INTERLACE_PLANE);
$image->setImageCompressionQuality(80);

$result_path = $info['dirname'] . '/' . $info['filename'] . '.jpg';
$image->writeImage($result_path);
$image->clear();
$image->destroy();

 

WebPに変換するサンプルコード

$info = pathinfo($path);

$image = new \Imagick($path);
$image->setImageFormat('webp');
$image->setImageCompressionQuality(80);

$result_path = $info['dirname'] . '/' . $info['filename'] . '.webp';
$image->writeImage($result_path);
$image->clear();
$image->destroy();

 

Androidアプリで画像を表示するのが段違いに速くなった。iOSだとBMPでも表示が速かったので気付くのが遅れた。

アプリはこちら。

 

< Related Posts >

2017年3月13日月曜日

マーケティングは学問。本から学んだ広告コピーの基礎

book_inspirationAmazonのKindle Unlimitedで読んだ本がとても有用だったので、忘れないための覚書。

読んだ本はこちら。

用語

用語 説明
USP
Unique Selling Proposition
競合優位性。
競合と比較した”価値”をどう最大化するかが重要
タグライン 商品の価値が最大化されるような定義付け。
常に商品と一緒に表示する。
誰もが分かるシンプルな表現で。
キャッチコピー タグラインに誘導するためのコピー。
ターゲットの共感を得る表現。
「不満のMAX」か「気持ちよさのMAX」を描く
AIDMAの法則 広告を見てから購買に至るまでの流れ
1.Attention
2.Interest
3.Desire
4.Memory
5.Action
ダイレクト(ウェブ)広告の場合はMemoryがない
アウトバウンド 企業からターゲットにアプローチすること
インバウンド ターゲットから企業にアプローチすること。
これを「見つける」ことがマーケティング。「作って」はダメ。
クロージングコピー その場での決断を促すための提案

 

ウェブサイトを作った際の自分用チェック項目。本と無関係のもある

  • 競合をしっかりと調べUSPが明確か
  • タグラインがモノとヒトとの関係を新たに創造しているか。ターゲットの心を揺さぶる表現になっているか
  • ターゲットの視点で作られているか
  • ユーザーの利益が明確か。推測させるのはダメ。一瞬で理解できるように
  • AIDMAの流れになっているか
  • クロージングコピーが出来ているか
  • シンプルに。無駄に長くないか

 

< Related Posts >

2017年3月7日火曜日

WordPress記事を投稿時にNginxのキャッシュを削除

nginx_wordpress_rsycleWordPressから任意のタイミングでNginxのfastcgi cacheを削除したいと調査したときの覚書。

環境: CentOS 7, Nginx 1.10.3, PHP 7.0.16, WordPress 4.7.2

 


1.Nginxキャッシュについて調査

WordPressにはこれを実現してくれるプラグインがある。

ソースを見たけれど正直何をやっているのか分からない。

ちゃんとNginxのキャッシュの仕組みを理解しないといけないかもと思い、参考になりそうな記事を読む。

 


2.Nginxの「fastcgi_cache_purge」モジュール

WordPress公式のNginxキャッシュ設定にクリアする記述があった。

location ~ /purge(/.*) {
  # Uncomment the following two lines to allow purge only from the webserver
  #allow 127.0.0.1;
  #deny all;

  fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
}

これを実行するには「fastcgi_cache_purge」というNginxモジュールが必要らしい。

インストールされているか確認
# nginx -V

nginx version: nginx/1.10.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

インストールされていない。

ソースからビルドする必要あるらしい。

ビルドした人の記事。

YUM管理からは出したくないので、さっきのPHPから直接キャッシュ削除する方法を試してみることにした。

 


3.PHPから直接削除(unlink)する

下記記事のPHPコードを参考に指定URLのキャッシュを直接削除するプログラムを書いた。

あとはsave_postにフックして実行するだけ。

やってみたら意外にあっけなく出来た。

プログラムで管理できるのは汎用性があってやりやすい。

 

< Related Posts >

2017年3月3日金曜日

Gmail検索クエリとGmail APIと一緒に使うPHPライブラリ

search-gmailGmail API経由でメール一覧を取得しているときの覚書。

環境:CentOS 7, PHP 7.0.16

メールを取得する際に設定する検索クエリの参考サイト。

 

日付の降順で取得したかったけど今のところ出来ないので、スレッド単位で取得して処理をしていく。

ドキュメントに書いてないことはライブラリのソースを読んだ方が早い。

 

メッセージはraw形式で取得してPHPライブラリでパースした方が開発し易い。

送信するときはPHPMailerでメールオブジェクトを作って、getSentMIMEMessageしたデータを(base64UrlEncodeして)setRawすると開発しやすかった。

 

< Related Posts >

2017年3月1日水曜日

PHP Standards Recommendations:PHPコーディング規約

coding-standardcomposerのauto-loadingの仕組みを見ていて、名前空間やファイル名の付け方を統一しようと思ったときの覚書。

PHP Framework Interop Group(PHP-FIG)というグループがPSRという規約をまとめてくれている。

さくっと理解するのはこちらのスライドが参考になった。

 

個人的にWordPressを使うことが多いけど、WordPressはインデントがタブだったり独自路線が強い。

 

 

< Related Posts >

2017年2月28日火曜日

Gmail APIでシステムとGmail(G Suite)を連携【調査編】

gmail-accessPOP3とSMTPを使うのは面白くないので、API経由でGmailを利用したらメールを削除することなくシステムと連携できると思い、試したときの覚書。

公式サイトを参考に

 

目次

  1. APIの使用制限
  2. システム用アカウントをGoogle Apps(G Suite)に追加
  3. Server-to-Serverのサービスアカウントを作成
  4. PHPサンプルを試す
  5. ウェブアプリケーションのOAuth2.0で認証

 


1.APIの使用制限

APIの使用制限がある。1日10億Quota Unit。メソッドごとに消費ユニットが違う。例えばメール送信は100ユニット消費する。

一秒間に250ユニットの制限がある。同時に3つ以上送信しようとすると制限に引っかかる。詳しくは公式サイトで。

メール送信はローカルのPostfixに任せた方がいいかもしれない。

 

クライアントライブラリが未成熟(?)

PHPはベータ版

Node.jsはまだアルファ版

 


2.システム用アカウントをGoogle Apps(G Suite)に追加

やろうと思っていることの概要。

システム専用のアカウントを作って、そのアカウント宛てに届いたメールを順次処理していく。

処理が終わったら「既読」ラベルを付けてアーカイブ。

Node.jsはアルファ版なのでWordPressのプラグインとしてPHPで開発することにした。

 


3.Server-to-Serverのサービスアカウントを作成

システム専用アカウントでGoogle Developer Consoleにアクセスして、API Keyを生成する。

公式サイトを参考に

簡単な手順

  1. Gmail APIを有効にする(プロジェクトの作成)
  2. 認証情報を生成
    「役割」はよく分からないので「ログ書き込み」を選択
  3. キー情報のファイルがダウンロードされる

 


4.PHPサンプルを試す

GitHubからPHP用のクライアントライブラリをダウンロードする。

Releasesに置いてあるのは依存関係も含んでいるので、そのまま解凍すれば使える。

今のバージョンはv2.1.1

公式サイトのサンプルをGmail API用に変更して実行しても「アクセストークンがない」と怒られる。

"error": "unauthorized_client",
"error_description": "Client is unauthorized to retrieve access tokens using this method."

クライアントライブラリが自動でアクセストークンを取得すると思ったら違った。

よく分からないので「サービスアカウントキー」での認証は諦め。

前にやったことのある「ウェブアプリケーション」の認証方式で実装することにした。

 


5.ウェブアプリケーションのOAuth2.0で認証

公式サイトと前の記事を参考に。あとクライアントライブラリの仕様が変わってる。

 

スコープの設定メモ。

google-api-php-client\vendor\google\apiclient-services\src\Google\Service\Gmail.php
の最初の方にconstされている。

 

部下がこれやろうとしてたら「PHPMailerを使ってPOP3とSMTPでいいじゃん」というのは間違いない。

 

< Related Posts >

2017年2月27日月曜日

【PHP】composerをインストールして依存関係管理

php_composerGoogle先生の巨大ライブラリをリポジトリにコミットしたくなかったので、composerをインストールしたときの覚書。

環境: CentOS 7, PHP 7.0.16

 

参考サイト

 

目次

  1. composerとは
  2. YUM経由でインストール
  3. composerを使ってライブラリをインストール

 


1.composerとは

PHPの依存関係管理ツール。Node.jsのNPMやRubyのBundlerを参考にしている。

composer installするとcomposer.jsonを参照して「vendor」ディレクトリにライブラリがインストールされる。

composer.lockというファイルがあるとそちらを参照してそのバージョンをインストールするので、作った人と同じ環境を構築できる。

WordPressのプラグインみたいに別ディレクトリに設置してほしい場合も対応可能。

 


2.YUM経由でインストール

remiリポジトリにあった。バージョンは1.3.2
# yum install composer

依存関係で結構な数のライブラリがインストールされる。

確認
# composer --version

Do not run Composer as root/super user! See https://getcomposer.org/root for details
Composer version 1.3.2 2017-01-27 18:23:41

 


3.composerを使ってライブラリをインストール

インストールするライブラリはこちら。

今回WordPressプラグインの中で使う。
$ cd /path/to/wordpress/wp-content/plugins/hoge/

対話形式でcomposer.jsonを作ってみる。
$ composer init

{
    "name": "dksg/hoge",
    "type": "wordpress-plugin",
    "license": "MIT"
}

項目の意味はあとで公式ドキュメントを読む。

ライブラリインストール
$ composer require google/apiclient:^2.0

vendorディレクトリにライブラリがダウンロードされた。

.gitignoreでコミットしないようにする。
$ vi .gitignore

vendor/

 

ひとまず環境が整った。

 

< Related Posts >

2017年2月15日水曜日

Twitter Bootstrap利用サイトでIE8だとimgが表示されない

ie8_picture作ったサイトを念のためIE8で確認したら画像が表示されないので対応したときの覚書。

環境: Bootstrap 3.3.7, WordPress 4.7.2

 


1.【準備編】Windows7 + IE8の環境を作る(Hyper-V)

公式サイトでIE8を搭載した仮想マシンがダウンロードできる。

認証が必要。デスクトップに書いてあるのでそのままcmdで叩く。

 


2.IE8だけ読み込むCSSを用意

試した結果表示されない原因はdisplay: tableを指定していたから。

画像は基本的に中央揃えにしたかったので、次のように設定していた(lessを使ってる)。

.img-responsive {
    &:extend(.img-responsive all);
    display: table;
    margin: 0 auto;
}

 

他のに影響与えないでIE8のみに対応したかったので、IE8だけ読み込むCSSを用意して、そちらで対応することにした。

bootstrapを使うときにお約束の記述に追記(WordPressの関数を使ってる)。

<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<link rel='stylesheet' href='<?php echo get_template_directory_uri();?>/assets/css/ie8.css' type='text/css' />
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->

ie8.cssはこんな感じ。

.img-responsive {
    /* img tag disappear in IE8 when using display:table */
    display: block;
}

あとの細かいところは気にしない。

 

< Related Posts >

2017年2月14日火曜日

WordPressで非公開(private)にした投稿はリダイレクトしないようにする

wordpress_redirectionWordPressでホームページを作成しているときの覚書。

環境: PHP 7.0.15, WordPress 4.7.2

「お問い合わせ」ページから送信した内容を非公開の投稿として保存していた。

そして気付いた。

http://hoge.com/?p=20

とPost IDを付けると

http://hoge.com/鈴木太郎/

に変換(リダイレクト)される。

これはパーマリンクの設定を「/%postname%/」にしておいて、氏名とかを記事のタイトルとして保存した場合に発生する。

Contact Form 7を使っていれば発生しない(と思う)。

 

少なくとも検索エンジンにキャッシュされると困るのでリダイレクトしないように設定した。

このp=20がなかった(is_404)時に鈴木太郎に変換している関数は
/wp-includes/canonical.phpのredirect_canonical()

下記のようにpost_typeで判定してる箇所(117行あたり)があったので

$post_type_obj = get_post_type_object($redirect_post->post_type);
if ( $post_type_obj->public && 'auto-draft' != $redirect_post->post_status ) {
    $redirect_url = get_permalink($redirect_post);
    $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url );
}

「post」タイプは公開しないので、全てリダイレクトしないようにフックを仕込む

function my_registered_post_type($post_type) {
    global $wp_post_types;

    if ($post_type == 'post' ||
        $post_type == 'attachment') {
        if (isset($wp_post_types[$post_type]->public)) {
            $wp_post_types[$post_type]->public = is_user_logged_in();
        }
    }
}
add_action('registered_post_type', 'my_registered_post_type');

プレビューで使うかもしれないので、ログインしているユーザーには許可するようにしてある。

WordPressをフレームワーク的に使うことが多いので気付いて良かった。

 

< Related Posts >

2017年2月8日水曜日

WordPressがBlankだったりトップにリダイレクトするのをデバッグ

wordpress_search久しぶりにWordPressの奥深くを潜っているときの覚書。WordPressは何がどの順番で実行するのか分かりにくいのでハマると長い。

環境: PHP 7.0.15, WordPress 4.7.2

 


1.確認すること

自分用チェックリスト

  1. サーバーにエラーログが出力されているかどうか
    # less /var/log/nginx/error.log
  2. wp_loadedにフックして読み込みが完了しているかどうか確認
    参考:Plugin API/Action Reference/wp loaded | WordPress Codex
  3. template-loader.phpの$templateをデバッグ出力してテーマのどのファイルを読み込もうとしているか確認
    参考:Template Hierarchy | Theme Developer Handbook | WordPress Developer Resources
  4. WordPressの内部で使っている「name」「year」などの名前でPOSTすると動作がおかしくなる
    参考:Class Reference/WP Query | WordPress Codex
  5. 存在しない関数を実行してエラーを起こして読み込まれた順番を確認。要xdebug

 


2.xdebugのインストール手順

YUM経由でインストール
# yum install php-pecl-xdebug
# systemctl status php-fpm

php infoを見て確認
# php -i | grep xdebug

 

< Related Posts >

2017年2月6日月曜日

Bootstrap3のWEBページを印刷してもいい感じに

bootstrap_printwkhtmltopdfでHTMLをPDF化しているときの覚書。

今までウェブサイトを印刷したときのことは全く考慮してなかった。Bootstrapのデフォルト機能にお任せだったけれど、印刷しても出来るだけ読みやすくなるようにしてみた。

環境: Bootstrap 3.3.7, less 2.7.2

 


1.印刷したときの横幅

Bootstrapの場合、印刷するとExtra small devices(.col-xs-)が適用される。

これは横幅が約547pxになるから。

<計算方法>

A4縦サイズの横幅は210mm
印刷するときのデフォルトマージンが約10mm
画面解像度が72dpi
1インチ=25.4mm、1mm=0.04インチ

A4の表示領域:210mm - (10mm x 2) = 190mm
mmをinchに変換:190mm x 0.04inch = 7.6inch
inchをpxに変換:7.6inch x 72dpi = 547.2px


 


2.Bootstrapで印刷用CSS

まずはBootstrapのprint.lessをimportしない。

替わりに下記CSSを読み込むと、small device(.col-sm-)が適用されたレイアウトに出来る。

これをlessで表現すると

@media print {
  .make-grid(sm);
}

Bootstrapのgrid.lessを参照。

あとの細かい箇所は必要なときに追加していく。

@media screen {}

も有用。

 

< Related Posts >

2017年2月3日金曜日

PHPでPDF生成するためにwkhtmltopdfをインストール

wkhtmltopdf_centos7HTMLからPDFを生成するコマンドラインツールwkhtmltopdfをインストールしたときの覚書。

環境: CentOS 7 x86_64

 

目次

  1. YUM経由でインストール
  2. 日本語フォントをインストール
  3. PHPシェルから実行
  4. PHP-FPMから実行するとエラー(2017/02/06 追記)

 


1.YUM経由でインストール

EPELリポジトリにあったのでそちらを使う。
# yum search wkhtmltopdf
# yum info wkhtmltopdf

Version     : 0.12.1
Repo        : epel/x86_64

# yum install wkhtmltopdf

試してみる
# wkhtmltopdf http://dksg.co.jp test.pdf

エラー

wkhtmltopdf: cannot connect to X server

下記QAを参考にした。

# yum search xvfb
# yum install xorg-x11-server-Xvfb

再度試す。
# xvfb-run /usr/bin/wkhtmltopdf http://dksg.co.jp test.pdf

成功したけど、日本語が表示されない。

 


2.日本語フォントをインストール

インストールされているフォント一覧を表示
# fc-list

Google先生が公開しているNoto Sans CJK JPを使う。公式サイトで「Japanese」と検索

ダウンロードと解凍
# cd /usr/share/fonts/
# curl -O https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip
# mkdir NotoSansCJKjp
# unzip -d NotoSansCJKjp/ NotoSansCJKjp-hinted.zip

フォントをインストールして確認
# fc-cache -fv
# fc-list

zipファイルは削除
# rm NotoSansCJKjp-hinted.zip

試す
# xvfb-run /usr/bin/wkhtmltopdf http://dksg.co.jp test.pdf

日本語が表示された。

基本は画面を印刷をした状態のCSSが適用される(@media printが適用される)。

詳しいオプションはヘルプを参照。
# wkhtmltopdf -H

レスポンシブデザインの横幅を変えようと下記コマンドを試してみたけど変わらない。最新にすると可能かもしれない。
# xvfb-run /usr/bin/wkhtmltopdf --dpi 200 --viewport-size 1280x1024 http://dksg.co.jp test.pdf
# xvfb-run --server-args="-screen 0 1024x768x24" /usr/bin/wkhtmltopdf --use-xserver http://dksg.co.jp test.pdf

 


3.PHPシェルから実行

PHPから実行するラッパークラスがある。

内部的にproc_openして、いい感じに実行結果を返してくれるみたい。

今回複雑なパラメータを渡す予定はないのでPHP標準のexecを利用することにした。

 

PHPから実行すると日本語が表示されない。

確認方法(rootユーザーでnginxユーザーとして実行するコマンド)
# sudo -u nginx /usr/bin/xvfb-run /usr/bin/wkhtmltopdf 'http://dksg.co.jp' 'test.pdf'

フォントがあるか確認
# sudo -u nginx fc-list

よく分からないので、WEBフォントを使うことにした。

Early AccessじゃなくなってもいいようにNoto Sansも一応追加しておいた。

<link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet" />
<link href="https://fonts.googleapis.com/earlyaccess/notosansjapanese.css" rel="stylesheet" />

css

body, table {
    font-family: "Noto Sans JP","Noto Sans Japanese","Noto Sans",sans-serif;
}

 


4.PHP-FPMから実行するとエラー(2017/02/06 追記)

実装後にexecするとエラー

which: no xauth in ((null))
xvfb-run: error: xauth command not found

下記サイトを参考に

php.iniを編集して対応する。コメントを外すだけ。
# less /etc/php-fpm.d/www.conf

env[PATH] = /usr/local/bin:/usr/bin:/bin

再起動
# systemctl restart php-fpm

動くようになったけども重すぎてタイムアウトする。

大人しくTCPDFにすれば良かったと思いながらも別プロセスでPDFを生成するように処理を変える。

 

< Related Posts >

2017年2月2日木曜日

PHPでPDF生成する方法を調査

php_pdfユーザーが入力したデータを帳票にして送信する仕組みを作っているときの覚書。8年ぐらい前にも調査した続編。

有力候補たち

名称 説明
TCPDF

公式サイト
PHPライブラリ。
サンプルが充実していて使い方も簡単。迷ったらこれ。
wkhtmltopdf

公式サイト
WebKit HTML to PDF
ウェブサイトをPDF化してくれるコマンドラインツール。
要インストールなため自サーバーが必要。
HTMLでレイアウトを生成しておけばPDFに変換できるので楽。プレビュー → ダウンロード時にコマンド実行するだけ。
PHPから利用するためのライブラリもある。
Google Drive
(Google Sheets)

開発者向けサイト
Google Driveにスプレッドシートを作っておいて、
コピー → セルに値を挿入 → PDFに変換ダウンロード
というアイデア。
エクセルにも変換できるし応用がきく。学習コストは高め。
他のサービスに依存するのでAPI仕様変更とかが恐い。容量制限もあるので注意。

Google Drive APIを試したいけど、API利用規約とかも考えるとリスクが高い。

 

TCPDFは何度も使っていて面白くないので、wkhtmltopdfを試してみる予定。

 

< 2017/02/07 追記 >
wkhtmltopdfを実装してみた感想。

PHPからwkhtmltopdfをexecで呼び出して、渡すURLも自分自身のPDF用HTMLを動的に生成するPHPアドレスにした。

wkhtmltopdfが一度に複数呼び出されると処理が追いつかずタイムアウトする。

これを安定運用するには

  • wkhtmltopdfに渡すのは動的PHPではなくローカルのHTMLとして事前に出力しておく
  • wkhtmltopdfを複数起動しないようにキュー管理する
  • 自前で実装するのではなくて、URLからPDF作成サービスがあるのでそちらを利用する
  • やっぱりTCPDFにする

帳票のフォーマットが決まっているなら、テンプレートを読み込んで流し込む方がいい。

今試そうと思っているアイデアはHTMLをテキストでデータベースに保存して、生成したPDFもBlob型でデータベースに保存する方法。

実行中かどうかはシェルコマンドで判定する。

HTML(PHP)で作成したのがそのままPDFに出来るのは本当に楽。開発も修正も。

 

< Related Posts >

2017年1月30日月曜日

PhpStormのファイル監視機能でLESSをCSSにコンパイル

PhpStormのファイル監視機能を設定したときの覚書。今まで仮想マシンにSSHでログインしてgruntのファイル監視を使っていたけれど、成功したのか失敗したのか分かりにくかった。

環境: Windows 10, PhpStorm 2016.3, Node.js 6.9.1

 

参考

 

目次

  1. Windows10にlessをインストール
  2. File Watchersの設定
  3. less-plugin-clean-cssをインストール

 


1.Windows10にlessをインストール

Node.jsは既にインストール済み。npmでlessモジュールをインストールする。cmdプロンプトを立ち上げて
> npm install -g less

インストールされるフォルダ

C:\Users\Daiki\AppData\Roaming\npm\node_modules

 


2.File Watchersの設定

PhpStormの設定からFile Watcherを新規追加。Programはすでに入ってた。

image

ちなみに「Sources」ディレクトリに設定して参照している。参考:PhpStorm 2016.3 Help :: Directories

これでlessファイルを編集してみるとコンパイルされた。

 


3.less-plugin-clean-cssをインストール

出力されたCSSファイルを見てみると先頭に

The compress option has been deprecated. We recommend you use a dedicated css minifier, for instance see less-plugin-clean-css.

とあったので「less-plugin-clean-css」をついでにインストールすることにした。

> npm install -g less-plugin-clean-css

File WatcherのArguments設定で「--compress」としてた箇所を置き換え。

--clean-css="--s1 --advanced --compatibility=ie8" $Sourcepath$\assets\less\main.less

clean-cssのオプションは公式サイトを参考に

 

main.cssとmain.mini.cssという形で出力してほしくなった。これはまた別の機会に調べる。

 

< Related Posts >

2017年1月27日金曜日

gitのリポジトリを入れ子で管理(git submobule)

block_in_blockWordPressで複数サイトを管理していて、俺々プラグインを別リポジトリで管理したいと思ったときの覚書。

環境: git 2.10.2.windows.1, GitLab

 

参考

 

目次

  1. プラグインをGitLabに登録
  2. プラグインの管理を別リポジトリに切替
  3. 本番用「live」ブランチに反映させる

 



1.プラグインをGitLabに登録

GitLabにプロジェクトを作っておく。

プラグインを別レポジトリとして登録。ちなみにWindowsからGit Shellを使ってLinuxの共有フォルダを操作している。
> cd /path/to/project/wp-content/plugins/myplugin/
> git init
> git remote add origin git@gitlab.com:wp-plugins/hoge.git
> git add --all
> git commit -m 'First commit'
> git push origin master

 


2.プラグインの管理を別リポジトリに切替

リポジトリのトップに移動
> cd ../../../../

サブモジュールとして追加してみる。
> git submodule add git@gitlab.com:wp-plugins/hoge.git .\wordpress\wp-content\plugins\hoge\

エラー

'.\wordpress\wp-content\plugins\hoge\' already exists in the index


< 2017/02/25 追記 >
このエラーは「パスが変更履歴のログに登録されている」という意味。一度全削除 → コミット → git submodule addをする必要がある。登録されているsubmoduleの確認
# git submodule

submoduleを最新にするには、そのsubmoduleのrootディレクトリに移動してgit pullする。

プロジェクトのrootディレクトリでは「submoduleに更新があるよ」というのは教えてくれるが自動更新はできない。


プラグインを丸ごと削除しても同じエラーなので、一度削除した状態でコミットしてからsubmodule addする。
> git add --all
> git commit -m 'Remove hoge plugin'
> git submodule add git@gitlab.com:wp-plugins/hoge.git .\wordpress\wp-content\plugins\hoge\

エラー

fatal: Could not switch to 'V:/dksg/web/.git/modules/.\wordpress\wp-content\plugins\hoge\': No such file or directory
fatal: clone of 'git@gitlab.com:wp-plugins/hoge.git' into submodule path 'V:/dksg/web/.\wordpress\wp-content\plugins\hoge\' failed

WindowsのGit Shellでコマンド叩いていたので、Linuxコンソールで実行してみた。
# cd /path/to/project/
# git submodule add git@gitlab.com:wp-plugins/hoge.git wordpress/wp-content/plugins/hoge

無事成功。コミットはGit Shellで。
> git commit -m 'Add submodule'
> git push origin master

 


3.本番用「live」ブランチに反映させる

上記の変更をliveブランチへ反映させる
> git checkout live
> git pull
> git merge --no-ff master

pluginフォルダが削除された状態になるので、submodule updateする。
> git submodule update

> git push origin live

この後、本番用サーバーでgit pullした際はinitから行う。
# git pull
# git submodule init
# git submodule update

サブモジュールに移動してmasterブランチに移動する
# cd /path/to/submodule/
# git branch
# git checkout master
# git pull

 

< Related Posts >

2017年1月17日火曜日

WordPressのXML-RPCとREST API(WP-JSON)を無効にする(Nginxの設定)

wordpress_attackWordPressを使ってホームページを立ち上げるときに不要な機能へアクセスされるのを防ぐ設定をしたときの覚書。

環境: CentOS 7.3.1611, nginx 1.10.2, WordPress 4.7.1

 


1.XML-RPCを無効にする

WordPressのXML-RPCはアプリから記事を投稿したりするのに使われていいる。

外部から頻繁にアクセスされてるのでサーバー側(nginx)でブロック。
# less /etc/nginx/conf.d/global/wordpress_restrictions.conf

# Deny all xmlrpc.php access
location = /xmlrpc.php {
    deny all;
    access_log off;
}

 


2.REST APIを無効にする

これも外部アプリとの連携用API。Jetpackで使っている?

下記のようなURLでユーザーの一覧を取得できてしまう。

http://hoge.jp/wp-json/wp/v2/users/

まだこれをターゲットとした不正なアクセスログはないけど、そのうち増えてくると思うのでnginxでブロックする。
# less /etc/nginx/conf.d/global/wordpress_restrictions.conf

# Deny all REST API access
location = /wp-json/ {
    deny all;
    access_log off;
}

 

nginxの全設定ファイルはGistに置いてあるので参考に

 

プラグインやテーマの中でブロックする場合は公開されているプラグインが参考になる。

これを設定してもadmin-ajax.phpへのアクセスは影響しない。

 

最後にヘッダーに出力されるリンク関連を表示しないようにfunctions.phpなどで設定。

remove_action( 'wp_head', 'rest_output_link_wp_head' );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
remove_action( 'template_redirect', 'rest_output_link_header', 11 );

 

< Related Posts >

2017年1月13日金曜日

eLTAXから給与支払報告書を電子申告しようとして途中で諦めた

eltax_pcdesk初めて法人として年末調整して給与支払報告書を提出したときの覚書。

 

目次

  1. eLTAXの概要
  2. eLTAXを作った業者
  3. eLTAXに新規登録
  4. 給与支払報告書を送付。eLTAXを投げ捨てる

 


1.eLTAXの概要

住民税の計算のために給与支払報告書を社員が住む市区町村にそれぞれ送信する必要がある。

これをウェブ上でできるシステムがeLTAX(エルタックス)。e-Taxの地方税版。

簡単な説明は公式動画を参考に。

利用方法は公式サイトを参考に。

※ 利用届け出(新規)後に表示される画面で利用者IDと仮暗証番号が表示される
→ 利用者ID再通知申請を行う必要がある
→ メール記載のURLをGoogle Chromeで開くとキー入力後真っ白な画面になるのでIEで開く必要あり

 


2.eLTAXを作った業者

このポータルサイトの構成がまた素晴らしく分かりづらい。使えるようになるまでが大変。e-Taxが使いやすく見えてきた。。。

あまりに使いづらいのでどこが作ったのか調べてみた。

システムはNTTデータ、サイトは富士通がそれぞれ5億円で落札している。

「今時ActiveXかよ!Macで使えねーじゃん!」とネットで叩かれている。

 


3.eLTAXに新規登録

eLTAXを利用するまでのポイント

  • eLTAXはプラットフォームの名前
  • ログインして利用するには専用ソフト(公式ソフトはPCdesk)のインストールが必要
  • 利用者IDはポータルサイトから申請して取得する必要がある
  • 仮暗証番号から本登録するにはPCdeskを使う

今後はe-TaxやeLTAXを使い分けずに一元化されていくらしい。

 


4.給与支払報告書を送付。eLTAXを投げ捨てる

公式ドキュメントを見ながら行う。提出先の市区町村の利用届は提出済み。

PCdeskはCSV形式しか対応していない。

 

手順

  1. 申告データ作成メニュー → 特別徴収義務者/源泉徴収義務者情報登録
  2. CSVファイルを作成。参考)eLTAX | 各種ドキュメント

そしてCSVの仕様書を見ながら1項目づつ入力。。。している途中で、あまりの入力しづらさに郵送の方が早いことに気付いた。

給与支払報告書(個別明細書)はMFクラウド給与から自動生成されたのがダウンロード可能。A5で2部必要だけれどもダウンロードしたPDFがA4横で2部並んでいるので、印刷してカットするだけでOK。

これと各市町村のホームページから配布している総括表を付けて送付した。

 

作成後にMFクラウド給与がeLTAXのCSV出力したというお知らせが。

今はひとり社長なので、社員を雇うまでは郵送でやると思う。

eLTAXを触りたくない。

 

< Related Posts >

2017年1月12日木曜日

e-Taxを利用申請して所得税徴収高計算書(納期特例分)を申告

初めての年末調整の流れで源泉所得税を申告(納付)したときの覚書。納付額は0円だったので納付してない。

事前に「源泉所得税の納期の特例の承認に関する申請書」を提出しているので、7月から12月分を1月20日までに支払う。

環境: 株式会社、社員1人(ひとり社長)、Windows 10 Pro

税務署から年末調整調整の書類と一緒に「所得税徴収高計算書(納期特例分)」が送られてくるので、これに記載して銀行で納付することもできる。

今までの年末調整の流れ

 

目次

  1. e-Taxに利用申請して利用者識別番号を取得
  2. 所得税徴収高計算書(納期特例分)を申告

 


1.e-Taxに利用申請して利用者識別番号を取得

国税庁の公式システム「e-Tax」を使う。WEB版を利用することにした。

公式サイトに従って環境を整える。

インストーラーを実行するだけ。電子定款を作成したときにJPKIを利用したので、これはインストールしない。

e-Taxソフト(WEB版)を開いて開始届出書を作成する。

必要事項を入力して送信するとすぐに利用者識別番号を取得できる。

所得税の納付だけなら電子証明書の登録は不要らしいけど、環境が整っているので一応登録しておいた。

 


2.所得税徴収高計算書(納期特例分)を申告

e-Taxにログインして「給与所得・退職所得等の所得税徴収高計算書(納期特例分)」から申請する。

image

納期等の区分は10月に会社設立したけど7月から12月にした。

所得税徴収高計算書の内容はMFクラウド給与で自動生成された内容を入力。

今回年末調整して本税がマイナスになった(退職したから)。

このままではエラーで次に進めないので手動で本税を0円にして摘要に「年末調整還付未済額 ○○円」と入力。

エラー表示されるけど次には進める。

所得税徴収高計算書が表示されるので印刷してPDFで保存しておく。

送信。

 

。。。

これで完了したのかな?

何か分かったら追記予定。

 

次回申告時(7月)にはマイナス分を精算するはず。

三菱東京UFJ銀行のネットバング「BizSTATION」からペイジーで納付してみる予定。

 

< Related Posts >

2017年1月11日水曜日

MFクラウド給与で年末調整を計算してe-TaxとeLTAXから申告(eLTAXは挫折して郵送)

finance-adjustment-20162016年10月に会社設立して初めての年末調整。手探りでやったときの覚書。

環境: 株式会社、社員1名(ひとり社長)

 

参考になったサイト

 

※ この記事を書いてる人は税理士ではありません。内容が間違っていることもあります。

 

目次

  1. 年末調整とは
  2. 年末調整の段取りを確認
  3. 年末調整の申告書を記載、保存
  4. MFクラウド給与で年末調整(年調年税額)の計算
  5. 源泉所得税の納付
  6. 税務署に法定調書合計表の提出(e-Tax)
  7. 市区町村に給与支払報告書の提出

 


1.年末調整とは

1年間に収める税金を確定させ、源泉徴収された金額との差額分を精算すること。

提出する書類と宛先と期限

書類 宛先 期限  
所得税徴収高計算書
(源泉所得税の納付)
税務署
(e-Tax)
1月20日
(特例)
支払いが0円でも申告する必要がある
給与所得の源泉徴収票等の法定調書合計表
支払調書
税務署
(e-Tax)
1月31日  
給与支払報告書 受給者の市区町村役場
(eLTAX)
1月31日  

一般的に12月の給与日に過不足分を精算するため12月25日までにやる

 


2.年末調整の段取りを確認

専用ソフトを使っても基本の流れは同じ。

11月末に税務署から送られてきた「年末調整のしかた」を参考に。

  1. 所得税から控除される各種申告書を集める
    給与所得者の扶養控除(異動)申告書
    給与所得者の保険料控除申告書 兼 給与所得者の配偶者特別控除申告書
  2. 年調年税額の計算
  3. 12月の給与支給に反映(過不足分の精算)
  4. 税務署へ源泉所得税の納付
  5. 税務署へ法定調書の提出
  6. 市区町村へ給与支払報告書の提出

 


3.年末調整の申告書を記載、保存

税務署からの書類に申告書も複数入っているので記載。

ひとり社長なので会社欄にも自分で記載。右上の「給与の支払者受付印」は特に何も押印しなくて大丈夫らしい。

領収書を保存してあるファイルに保存した。

 


4.MFクラウド給与で年末調整(年調年税額)の計算

まずは使い方ガイドの年末調整を読む。

年末調整に必要な申告書を電子ファイルで収集する場合は、事前(11月30日まで)に申請が必要。

あまりメリットがないので今後も紙で保存することにした。

申告書は税務署から求められるまで提出する必要はない。7年間保存しなければならない。

 

MFクラウド給与で年末調整を始めると設定項目を聞かれる。

こんな感じで選択。

image

その後、自分の年調計算を開いて、前職の源泉徴収額などを入力。

生命保険や配偶者控除はなし。

あとは「給与計算へ反映」ボタンをクリックすると自動で「年調過不足税額」を計算してくれる。

これが正しいのか確認する方法がないけれど、前の年と比較すると何となく正しそう。

 


5.源泉所得税の納付

過不足税額が決定したので、税務署に源泉所得税を納付する。

年末調整の書類と一緒に送られてきた「所得税徴収高計算書」に記載して銀行で払っても大丈夫だけど、今後のためにe-Taxを利用してみた。

MFクラウド給与は帳票一覧から「所得税徴収高計算書(納特)」が表示できるので便利。

e-Taxの利用方法は長くなったので別記事にした。

 


6.税務署に法定調書合計表の提出(e-Tax)

法人が社員や外部の人に払った報酬等をまとめた書類を提出する。

e-Taxにログインして「 給与所得の源泉徴収票等の法定調書(及び同合計表)の提出 【提出枚数100枚以内】」を選択。

指定フォーマットで作成したCSVを読み込む。各項目の説明や値は下記を参考に。

。。。CSVで値を解読しながら入力するより、画面で入力していった方が早かった。

 

迷ったところ

  • 支払金額などの「内」は今の会社からの支給額。下の合計欄には前職を含めた支給額

 

最後に電子署名を付けて送信。

税務署から連絡があったら追記予定。

 


7.市区町村に給与支払報告書の提出

住民税の計算のために給与支払報告書を社員が住む市区町村にそれぞれ送信する必要がある。

これをウェブ上でできるシステムがeLTAX(エルタックス)。e-Taxの地方税版。

e-Taxと似たようなもんだろうと思ったけど、見事に裏切られ長くなったので別記事にした。

結局、eLTAXは諦めてMFクラウド給与から自動生成される給与支払報告書を編集して郵送した。

 

MFクラウド給与がeLTAXに対応したらしいので、来年は電子申告するかもしれない。

 

< Related Posts >

Related Posts Plugin for WordPress, Blogger...

Blog Archives