朝霞市在住のWEB系エンジニアかあさんのPHPメインの雑記帳

ITかあさん

最新記事

これは使える!国土交通省提供の市区町村取得API

公的機関が提供する市区町村取得APIはないものか!!

画像は関係ないかな

すごい探した!そして見つけた!

WordPressにしろ、自作CMSにしろ何か全国規模のポータルサイトを作りたいと思ったとき、
都道府県ならまだしも、市区町村を手動でぽちぽちしていくのは面倒!
しかも合併などで市区町村名が変わってしまったら都度情報を変更しなければなりません。

また、総務省の指定する「市区町村コード」というのがありまして、「オレ埼玉県民だから埼玉県のIDを1番にしまーす」などの「エンジニアの個人的」な主観でもってコードを決めるのはよくないです。

個人で市区町村コード提供するものもないとはいえないのですが、信頼度を考えると公的機関が提供するAPIサービスがよい!!と思ってずっと探していたら見つけました!

国土交通省 都道府県内市区町村一覧取得API

このAPIは不動産取引価格情報を提供するAPIと一緒に提供されているもので 都道府県番号を指定すると市区町村コードと市区町村名を取得することが出来ます。(シンプル)

URLの例:www.land.mlit.go.jp/webland/api/CitySearch?area=13

戻り値

{
“status”: “OK”,
“data”:[
{
“id”: “13101”,
“name”: “千代田区”
},
{
“id”: “13102”,
“name”: “中央区”
},
{
“id”: “13103”,
“name”: “港区”
},
{
“id”: “13104”,
“name”: “新宿区”
},
URLの例:www.land.mlit.go.jp/webland_english/api/CitySearch?area=13

なお、英語版も用意されています!

{
“status”: “OK”,
“data”:[
{
“id”: “13101”,
“name”: “Chiyoda Ward”
},
{
“id”: “13102”,
“name”: “Chuo ”
},Ward
{
“id”: “13103”,
“name”: “Minato Ward”
},

英語版も用意されていると、ディレクトリ名を用意しようとしたときのローマ字設定が楽なので大変ありがたい!(Wardはremoveしないといけないけども)

都道府県番号は01~42まであるので、順番にループしてあげれば全国の市区町村が取得できますね

APIのレスポンスも早く、利用に関して登録もない、シンプルで使いやすい市区町村取得にいかがでしょうか!

Vagrantでpingが通らない!ゆえにVagrantネットワークを学び直したよ

Vagrantでpingが通らない発生

Vagrant
こんにちは、大変ご無沙汰しております。仕事忙しくて死んでましたが比較的元気です。
比較的元気めに死んでました。
Vagrant環境を構築したら事件に遭遇。

vagrantでWebサーバー立てたのにブラウザから全くアクセス出来ない

問題解決するまでに3連休使ってしまいましたよ。
結果として、ネットワーク失敗したvagrantを一度destroyしてもう一度upするとうまくいったのですが、vagrantはもとい、centos7のネットワーク関係を学ぶのによい機会となったので備考録として残しておきたいと思います。

Vagrantfileを今一度しっかり読もう

明らかにVagrantのネットワークに関する問題にぶつかって、初めてしっかりとVagrantfileに目を通しました。
(遅せーよ)
私が今回使ったVagrantfileはこちらです。まっさらな状態からvagrant環境を作る手順を記載してあります。

空っぽのCentOS7のboxを追加して、環境を作ります。

initしたVagrantfileの中身を確認

今回使ったvagrantfileをそのまま記載。vagrantfileのあるところでvagrant upをするとまっさらなCentOS7の環境が出来ます。

Vagrant network

お手軽に自分のマシンに仮想環境が作れると思っていたvagrantですが、Vagrantfileのネットワークについてちゃんと理解できていなかったので復習。

forwarded_port

vagrant_network

中からアクセスする時(localhost)はforward(転送)し、IPアドレスでアクセスする(guest)はguestに設定したポートでアクセスする

public_networkでもprivate_networkを設定していても設定することが出来る。
ゲストは80ポートへアクセスすると8080ポートへ転送されることになります。urlに
http://192.168.10:8080 とか、URLにポートが含まれるのが嫌な場合、forwarded_portの設定が必要。
firewall側ではゲスト向けの80ポートだけ開放すればよい。

http://192.168.10/でアクセスすると、http://192.168.10:8080/にアクセスしたことになる

特にURLにポートが含まれても別にどうって子とない場合、この設定はなくても大丈夫。

public_network

public_networkだと同じネットワーク回線に接続しているマシンに対して接続を許可する

他の端末からもアクセスする可能性がある,複数人で作業する場合はpublic_networkがよいですね。
vagrant upで起動する際、publicでよいか聞かれるので、「1」を入力するとpublic_networkで起動できます。

private_network

環境を構築したホストマシンからのみのアクセスを許可する

自分1人で作業するならprivate_networkで十分そうです。

vagrant upでサーバー起動したらまずすること

vagrant upでVMサーバー起動したら最初にすることはapacheやら必要なソフトのインストールではなくネットワークやfirewallの確認をします。

itKaasan-MacBook-Pro:root# vagrant up
itKaasan-MacBook-Pro:root# vagrant ssh
[vagrant@localhost ~]$ ifconfig
enp0s3: flags=4163 mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fede:e0e prefixlen 64 scopeid 0x20 ether 08:00:27:de:0e:0e txqueuelen 1000 (Ethernet)
RX packets 1831 bytes 151847 (148.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1356 bytes 161553 (157.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

enp0s8: flags=4163 mtu 1500
inet 192.168.33.12 netmask 255.255.255.0 broadcast 192.168.33.255
inet6 fe80::a00:27ff:fe9f:1d69 prefixlen 64 scopeid 0x20 ether 08:00:27:9f:1d:69 txqueuelen 1000 (Ethernet)
RX packets 5362 bytes 768787 (750.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5694 bytes 10079743 (9.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Lokale Schleife)
RX packets 76 bytes 10872 (10.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 76 bytes 10872 (10.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

vagrant upで起動したらサーバーログインをして、ifconfigでvagrant fileに記載したIPアドレスがちゃんと設定されているかを確認します。
なお、私はこれが何をやっても出ませんでした!(これで3日潰したのですが、腹がたってvagrant destroyして再度vagrant upしてifconfigでIPアドレス確認したら設定したIPアドレスが出現したんです!)
私はvagrantを再構築することで思った通りのIPアドレスを確認出来ましたが、centos7のネットワークマネージャー(nmtui)で固定IP設定出来ます。なければnmtuiでvagrantfileに記載のIPアドレスを追加設定するというやり方もあります。案外vagrant再構築すれば復活したのは私の例ですが。

config.vm.synced_folder

synced_folderはまんまフォルダの設定のこと。vagrantfileと同じ階層にappフォルダがあって、vagrant sshでサーバーログインすると、appフォルダという名称ではなくvagrantフォルダという名称にappフォルダが変わっています。
vagrantのサーバーの中からみたフォルダ名と、ホストマシンから見たフォルダの名称が違うという点に注意してください。

pingで外からのアクセスをチェック

一度vagrant sshをexitしてvagrantのサーバーから離脱するか、ターミナルをもうひとつ立ち上げてvagrantfileに記載のIPアドレスに接続できるかチェックしてみましょう。

# pingでvagrantの外からアクセスできるかチェック
itKaasan-MacBook-Pro:chihiro-matsuda$ ping 192.168.33.12
PING 192.168.0.1 (192.168.33.121) 56(84) bytes of data.
64 bytes from 192.168.33.12: icmp_seq=1 ttl=255 time=0.574 ms
64 bytes from 192.168.33.12: icmp_seq=2 ttl=255 time=0.536 ms

このとき、pingテストで「Request timed out.」が出たらこの後どんなにWebサーバーを立てようがブラウザアクセスも何も出来ません。
私はsshでログインは出来るのにpingがどうしても通らない問題が解決せず、destroyしてからvagrant upしたら普通につながりました。なんだったんだろうね。

firewallを空ける

Sequence Diagram

# ポート開放
firewall-cmd –add-port=22/tcp –zone=public –permanent
firewall-cmd –add-service=ssh –zone=public –permanent
# サービスの削除
firewall-cmd –remove-port=22/tcp –zone=public –permanent

# 利用可能なサービス一覧
firewall-cmd –get-services

# firewalldのリロード
firewall-cmd –reload

# firewallの無効化
systemctl stop firewalld

# OS起動時無効化
systemctl disable firewalld

仮想VMであってもポートはデフォルトでは全て閉じているので必要最低限だけ空けるか、
あるいは自分1人しか使わないprivate_networkならいっそfirewallを切ってもいいかなって思ってる。
(ただし本番のサーバーでやったらダメ、絶対)

vagrantのネットワーク関連まとめ

手順として、
・vagrant init
・vagrant up
・vagrant ssh
・ifconfig
・pingで確認

実は以前node.jsでスクレイピングでデータを自働取得するスクリプトをvagrantの中に立てたCentOSサーバーでやってたんです。
全てsshでログインしてlocalhost内でスクリプト実行していたのでguestからのアクセスはテストしていませんでした。
で、そこにwebサーバーをいざ立ててウェブブラウザからアクセスしても全くつながらず連休3日つぶした次第。。

結局なぜsshでログインできるのにprivate_networkでホストマシンからping叩いても通らなかったのはなぞですが
サーバー立てた直後にpingテストさえしておけば原因究明には時間がかかりませんでした。

おかげでvagrantのネットワーク設定の部分は勉強しなおすよいきっかけになったのでよかったと言えばよかったかも。

ITかあさん、いよいよ法人設立へ!設立するならいつがよい?

いよいよ法人設立へ!設立するならいつがよい?

YUUKI150321200I9A4368_TP_V

前回自分の売り上げと年収をさらしたことにより、ややバズッた「ITかあさん法人化への道のり」ですが、
・・・

法人化、するよ!
おおお!年内は個人事業主でやろうって言ってたのに、ずいぶん決意が早いなあ
いやあ、いろいろ悩んでたんだけど、よくよく去年度の売り上げみたら12月分の売り上げ、1月に作業がまたいで請求書出したのが1月だったから
今年の売り上げは13ヶ月分あるって気がついたんだよね!
・・・・
で、運悪く(?)単発案件も2~3月に入ったことで今期の売り上げ1000万はうまいこと調整しないと確実に超えるよね!っていう
トンでもない感じになっちゃいまして。
う。うわあ。
もう一千万 超えるなら超えるで思い切り仕事したいじゃん。今後は事業を細く長く続けていくためにもここらで法人化しようかなって
同意できたのがここだけだわ。

さて時期はいつがいい?

年内に設立したとして、個人事業主としての売り上げと法人としての売り上げ2つになるからどうしたらいいのよ

お世話になっております。現在フリーランスで仕事をしており、法人設立しようと決めたのですが、
法人設立をいつにすればよいのか分かりません。。

仮に9月1日で法人設立とした場合、8月31日までの報酬を個人事業分として3月15日に青色申告をして、9月1日以降の一年間を法人として決算すればよいのでしょうか?

1.法人設立日について
 設立日の検討は、(A)業務上の理由(取引先との関係上、法人にする必要がある)と、(B)税務面での理由 があります。
 (A)についてはご自身でご検討される部分ですので、(B)について回答いたします。

(1)消費税の納税義務
 個人事業主は、2年前の売上が1,000万円超の場合に消費税の納税義務者となります。そのため、個人事業主として消費税の納税義務者となったタイミングで法人設立(法人成り)するケースも多いです。
 消費税の納税義務者の判定については添付資料もご一読ください。

(2)給与所得控除
 
 があります。
 現在、確定申告では基礎控除(38万円)と青色申告控除(65万円)がありますが、給与所得については別途給与所得控除(65万円)があります。
 今年、法人成りして役員報酬をもらった場合、役員報酬の65万円までは所得税・住民税がかからなくてすみます。

法人成りのタイミングが1月1日ですと、1年間の間に事業所得と給与所得の2つを受けることがないので、上記のように控除を二重に受けることはありません。

2.2016年の確定申告について
>仮に9月1日で法人設立とした場合、8月31日までの報酬を個人事業分として3月15日に青色申告をして、9月1日以降の一年間を法人として決算すればよいのでしょうか?
 ⇒
(1)個人の確定申告
 ①1/1~8/末までの個人事業主としての収入・経費(事業所得)と、
 ②9/1~12/末までの法人からの役員報酬(給与所得)
を合算して3月15日までに青色申告します。

(2)会社の決算
 >9月1日以降の一年間を法人として決算すればよいのでしょうか?
⇒はい、会社の決算のほうは上記ご認識のとおりとなります。

おおお!つまりまとめると、

年内で個人事業主の青色申告としての65万円控除と法人からの役員報酬での給与所得控除のダブルの控除があるから
個人事業主と法人設立は年内でだぶってたほうが所得控除でお得!ってことだね

この控除はお前一度受けているはずだぞ
っあーーー!会社員辞めてから個人事業始めた年はダブルの控除をもらってたー!
だから会社員の期間がまったくなかった去年度の所得税はえらいことになってたのかー
(1)の消費税の納税義務も要チェックな
なんだ、1000万超えたら即消費税納めるのかと思ってた。
そんなわけでいつ設立する?
仕事は期間しばりで更新するから、ひとまずそのタイミングに合わせて9月に設立しようかな。
もう夏も始まるから早め早めに準備しないとな。
はええええええええええええええええええ!
こころの準備がああああ!!

そんなわけでまとめ

個人事業主は、2年前の売上が1,000万円超の場合に消費税の納税義務者
個人事業主から法人化する年度は、法人成りのタイミングが1月1日1年間のだと、事業所得と給与所得の2つを受けることがないので、控除を2重に受けられる期間で設立したほうがお得。

今回は士業の先生の話よりも、会社設立が1週間で出来ることが衝撃だったわ。

ITかあさんが会社設立の相談をしているのはココ!

original

バックオフィス支援&クラウド士業

Vagrantでnode.js環境を作る

Vagrantを最新に

Vagrant 最新
Vagrant環境をアップデートします。

# vagrant -v
Vagrant 1.7.2

Vagrantの本家サイトを確認すると、現在Vagrantは1.8.1が出ているそうで、自分の既存の環境と差をチェックして古ければバージョンをあげます。
最新vagrantダウンロード

Vagrantを最新に

vagrantをインストール
Vagrantを通常のソフトウェアのインストールと同等にインストールするとアップデートされる。

アップデートを確認し、プラグインをアップデート

# vagrant -v
Vagrant 1.8.1
# vagrant plugin update
Updating installed plugins…
All plugins are up to date.

アップデートをしたら、プラグイン関係もアップデートします。

適当なフォルダを作って、vagrant add

CentOS7のvagrantのboxを追加

# mkdir electron
# cd electron/
# vagrant box add CentOS7.0 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box

box listを確認、vagrant initで使うboxを選択

boxをダウンロードしたら、現在使えるbox listを確認し、使いたいboxを選択します。

# vagrant box list
CentOS7.0 (virtualbox, 0)
# vagrant init CentOS7.0
# vagrant up

vagrant sshよりNVMをインスト

NVM(Node Version Manager)をインスト。
NVMのインストール方法についてはこちらを参照
2016年5月6日現在だと下記が最新。

# curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
# nvm install 5.0

バージョンチェック

# nvm –version
0.31.0
# node -v
v5.0.0

visudo

# visudo

設定変更

env_restを無効
#Defaults env_keep += “HOME”
↓↓↓↓↓
Defaults env_keep += “HOME”パスの置き換えをしないようにする
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
↓↓↓↓↓
#Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

変更したら一度ログアウトし、再度ログインして設定が反映される。

Vagrantの作業フォルダを変更

スクリーンショット 2016-05-07 10.24.33

vagrant initすると、vagrant fileができて、.vagrantフォルがが出現している。

仮想マシンとしてのフォルダと、PCから作業出来るフォルダはデフォルトでは.vagrantフォルダで共通。
このままでは作業しずらいので、下記のようにvagrant fileを変更した。

config.vm.synced_folderの第一引数はホストマシンでのフォルダ(Vagrantfileから見た時の相対パスで)
第二引数は仮想マシンから見た時のフォルダ。
Vagrantfileを修正したら、ホストマシンにappフォルダを作り、一度vagrant sshで仮想マシンにログインした後、仮想マシン直下にvagrantディレクトリを作成。

ホストマシン

スクリーンショット 2016-05-07 10.49.47

仮想マシン

# vagrant ssh
Last login: Sat May 7 03:42:25 2016 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ pwd
/home/vagrant
[vagrant@localhost ~]$ cd /
[vagrant@localhost /]$ mkdir vagrant
[vagrant@localhost /]$ cd vagrant/
[vagrant@localhost vagrant]$ pwd
/vagrant
[vagrant@localhost vagrant]$ exit
logout
Connection to 127.0.0.1 closed.
matsuda-no-MacBook-Pro:electron root # vagrant reload

仮想マシンにもフォルダを作ったら一度sshをログアウトして、vagrant reloadすればOK.
仮想マシンとホストマシンとのフォルダの階層がVagrantfileに設定したものと正しくあっていなければエラーが出てしまうので注意。

npm initdでプロジェクトの初期化をする

再度vagrant sshで仮想サーバーにログインし、npm initでプロジェクトの初期化をする

[vagrant@localhost ~]$ npm init

色々聞かれるけど、ひとまずここは全部enterでいいかも。
出来上がるファイルが以下。

上記のようなファイルがnode_modulesと同じ階層に自働で作成される

手順まとめ

1.vagrantをインスト
2.CentOS7のvagrantのboxを追加
3.追加したvagrant boxで vagrant init CentOS7.0
4.NVMを追加
5.visudo 設定変更
6.vagrantの作業フォルダの設定 Vagrantfileを変更してvagrant reload
7.npm initでnodeのプロジェクトの初期化を行う。

以上の作業でるvagrantによるCentOS7環境でのnode環境が出来上がりました。