人生100年!生涯エンジニア人生!

楽しいエンジニア人生!

PythonからDockerコンテナを起動する。

docker-compose.ymlでも良いのですが・・・

Scrapyの技術同人誌を書いたとき、Dockerの起動はdocker-compose.ymlを書いて起動するようにしました。
kawahara-ci.hatenablog.com

これをPythonのDockerモジュールを使って起動する方法もあるよねと思いました。
pip install dockerをやってから早速やってみました。

コンテナの状態

プログラムからDockerのコンテナを起動するとき、コンテナは3つの状態が考えられます。

  1. 該当のコンテナが起動済み。
  2. 該当のコンテナがあるが起動してない。
  3. 該当コンテナが存在しない。

この3つの状態を理解して作っていきましょう。

コンテナが起動済み

docker.from_env()でDockerのオブジェクトを取得しておき、そのオブジェクトから、コンテナリスト(containers.list())を調べて、コンテナ名と一致していたら、コンテナが起動しているので、何もしないで終わります。

コンテナがあるが起動してない

コンテナリスト(containers.list())のデフォルトは起動しているコンテナを取得しますが、パラメータにall=Trueを追加するとすべての状態のコンテナリストを取得します。

最初に起動しているかを確認しているので、このときに取得できたコンテナリストとコンテナ名が一致したら、起動していないコンテナがあることになります。

そのときはcontainer.restart()でコンテナを再起動します。

コンテナが存在しない

最後は、コンテナが存在しない状態なのでcontainers.runでDockerイメージをpullしてコンテナを起動してしまいます。
なお、Dockerイメージが既にpull済みのときは、コンテナの起動だけをします。

containers.run('scrapinghub/splash', name='splash', ports={'8050/tcp': 8050}, detach=True)このような感じでコンテナを起動します。

ここで重要なのはnameパラメータです。
コンテナを起動するとき名前を設定しないと、Dockerは良きに計らえということで適当な名前を付けてしまいます。
そうなると、コンテナの存在を確認しにくいので、コンテナの名前を付けて起動するようにします。

完成形

以上のことを踏まえて作ると、以下のようになります。
3つの状態を判別してコンテナが起動できるようになりました。

import sys
import docker

container_name = 'splash'
client = docker.from_env()

container_exists = False
for container in client.containers.list():
    if container_name == container.name:
        container_exists = True
        print('Container is up.')

if container_exists == False:
    for container in client.containers.list(all=True):
        if container_name == container.name:
            container.restart()
            print('Container restartup.')
            sys.exit()

    container = client.containers.run('scrapinghub/splash', name=container_name, ports={'8050/tcp': 8050}, detach=True)
    print('Container startup.')

【妄想】Suicaなど交通系ICカードが駅の入場券になるために変更したこと

Suicaなど交通系ICカードが駅の入場券になる

Suicaなど交通系ICカードが、JR東日本 Suica エリア(首都圏・仙台圏・新潟圏)の当社各駅在来線改札内で開始します。

「タッチでエキナカ」2021 年3月13日(土)初電より開始!

https://www.jreast.co.jp/press/2020/20210119_ho02.pdf

Suicaなど交通系ICカードが入場券にしてほしい需要は昔から存在しており、ついに対応したことになります。

なぜ、ここまで時間がかかったのだろうか?と誰もが思いますよね?

会計規則が関係する話

自動改札は乗車券として徴収しているので、入場券のような雑収入として計上できないので、単なる会計上の問題だよねーと旅客規則大好きな人なら昔から認識してます。
そうなのです、Suicaなどの交通系ICカードで入場券扱いができないのは有名な話なのです!!

そして妄想ですが、今回の改修は入場時に収入扱いを未定にして、出場時に収入扱いを決めるという方法じゃないかと思います。
これなら、入場券の2時間ルールも対応できますね。

ちなみに、この会計規則上の問題について早速記事が出ておりました。

www.itmedia.co.jp

JR東日本では会計規則上、乗車券からの収入を「運輸収入」、入場券からの収入を「旅客雑収入」と区別している。

ここにある通り、会計規則の話が書いてあります。

新宿駅通り抜け

もう1つ面倒な事象があり、それが2020年7月19日(日)から無くなりました。

新宿駅のことです。

2020年7月18日(土)まで、JR新宿駅のJR中央東改札は京王線小田急線の新宿駅として機能し、通り抜けであるならば料金を徴収しないという扱いをしておりました。

この機能を実現するために、JR東日本のJR中央東改札から入場すると、初乗り運賃として運輸収入を徴収しますが、その後、京王線小田急線に入場すると、JR東日本から運輸収入を渡す処理にしていたと思われます。

ここに今回の交通系ICカードで入場券扱いができる機能にしてしまうと、JR新宿駅から入り、京王線小田急線に入場するときは、同じ駅なので入場券扱いなのですが、そこを運輸収入に切り替えての特例処理を入れる必要があります。
雑収入を私鉄他社に渡すことは契約上していないだろうし、会計上おかしくなると推測されるので、特例処理を入れるのは必須でしょう。

また、京王線小田急線から出場するときは、出場すると同時に、JR新宿駅に入場して、そのままJR新宿駅を出場することになり、同じ駅での入場出場となりますので、ここでも入場券として徴収したのを、運輸収入に切り替える特例処理を入れる必要があります。

このような、JR新宿駅だけに特例処理を入れるのは少々面倒なのではないかと推測されます。

ただ、2020年7月19日(日)から、JR新宿駅は通り抜けができなくなりましたので、この特例処理を入れる必要は無くなりました。

今回のSuicaなどの交通系ICカードでの入場券扱いが遅くなった要因の1つに、JR新宿駅の特殊なルールが影響していたのではないかと?妄想が広がります。

おまけの話、定期券のとき

おまけの話、定期券のときは、どのような扱いになるのか?その辺りが気になりますよね?

定期券?関係します?と思われると思いますが、意外と、このことは知られていませんが、定期券は乗車券の扱いなので、駅へ入場目的で入ることはできないのです。

エキナカを利用するだけで定期券で入場することはできません。

もう一度、JR東日本ニュースリリースを見てみましょう。

https://www.jreast.co.jp/press/2020/20210119_ho02.pdf

Suica 定期券区間内の駅および IC 企画券の有効区間内の駅では本サービスはご利用いただくことができません。

定期券の利用できないことが書いてありますね。

少々面倒ですが、定期券は下のような使い方をするしかないですね。
駅に入る→エキナカを利用する→列車を利用し移動する→別の駅で下車する。

そのままかもしれませんが、今後は定期券で同じ駅に入場してから出場すると、出場するときにエラーになることが予想されるので、この辺りはサービス開始時の2021年3月13日(土)に注目したいですね。

ふるさと納税でワンストップ特例制度の提出期限の話

結論

ワンストップ特例制度は1月10日が提出期限ですが、1月8日に気付いて間に合わないと思っても郵便局に持っていき速達などを利用して、1月10日までに間に合わせようとすれば、優しい自治体なら受理してくれるときがあります。

受理されないときもありますが、そこで怒らないでください、提出が遅いのが悪いと自覚しましょう。

説明

確定申告が不要になるワンストップ特例制度、これには提出期限があります。
ふるさと納税は決済した日時で納税する年が決まります。
例をあげると 2020年1月1日 0:00から2020年12月31日 23:59 までに決済したら、ワンストップ特例制度の申請書類は、2021年1月10日までに書類が自治体に到着した分までが有効になります。

そのため12月中旬頃から申請書類が間に合わない恐れがあるので、自治体によってはワンストップ特例制度の申請書類が送られてこない事があります。

12月中旬頃に、ふるさと納税のワンストップ特例制度を利用する人は、総務省のページから申請書類をダウンロードして印刷して提出しましょう!
https://www.soumu.go.jp/main_content/000397109.pdf

なお、郵送料金は自己負担で行いましょう。

間に合わないとき

1月10日必着できないときは、ワンストップ特例制度は使えなくなるので、確定申告をしてください。
間に合わなくても、自治体に文句言うのはやめましょう。

ギリギリなら速達郵便で申請書類を提出しましょう!

まとめ

  • 12月中旬頃からワンストップ特例制度の申請書類は郵送されてこないので、申請書類を印刷して、郵送料金を自己負担で提出する。
  • 1月10日に間に合わないなら確定申告をしましょう。
  • 1月10日の3日前ぐらいなら速達郵便で提出しましょう。

個人的には、この書類もオンラインでできるのがいちばん良いのですけどねー。

技術書典10新刊「PythonとScrapyを使ったWebスクレイピング実践編〜あのサイトをスクレイピングするまで!〜」のご紹介

技術書典10新刊

技術書典10に新刊を出しました、はい、2020年12月31日にです!

タイトルは「PythonとScrapyを使ったWebスクレイピング実践編〜あのサイトをスクレイピングするまで!〜」です。
techbookfest.org

え?迷惑メールのネタじゃないの?
たまには、違うのを出そうと思いましたので、Pythonの書籍です。

Pythonを使ったWebスクレイピングに関することです。

よろしくかったら是非ともお買い上げください。
それでは、みなさま良いお年をお迎えください。
そして、2021年はコロナが消滅している良い年であることを願っています。

更新内容

2020年12月31日4時半に審査依頼出しました、技術書典のスタッフの方、よろしくおねがいします。
2020年12月31日 10時半、販売開始しました!

商業出版のご紹介「エンジニアのためのオンライン生活ガイドブック」と「エンジニアのための見積もり実践入門」

概要

過去に参加した技術同人誌が、商業出版されます。
2冊ありますので、ご紹介します。

エンジニアのためのオンライン生活ガイドブック

まずは「エンジニアのためのオンライン生活ガイドブック」です。
こちらを2020年12月18日発売します。

オンラインで仕事も!生活も!趣味も! 『エンジニアのためのオンライン生活ガイドブック』発行! 技術の泉シリーズ
prtimes.jp

どのような内容というと、コロナの影響によるニューノーマル向けてのエンジニア向けのオンライン生活のガイドブックです。
私は13章と21章と23章を執筆しました。

第13章 オンライン勉強会への参加障壁
第21章 オンライン行政処理
第23章 オンライン時代のキャッシュレス決済利用のススメ

「第13章 オンライン勉強会への参加障壁」は、こちらのブログ記事から加筆修正して盛り込みました。

kawahara-ci.hatenablog.com

「はてぶ」では69人(減って67人)の方にブックマークされ、軽くバズっていた記事です。

[B! 勉強会] 勉強会がリモート開催になり、勉強会に参加しにくくなった件 - 人生100年!生涯エンジニア人生!

f:id:hideaki_kawahara:20201211164249p:plain

他の章では、オンライン勉強会やZoom飲み会のノウハウなどもありますので、エンジニアに限らず多くの人にも刺さる内容になっております。

ご興味があればお買い上げください。

エンジニアのための見積もり実践入門

こちらは既に発売中です。

見積もりって難しい!というエンジニアのための1冊!『エンジニアのための見積もり実践入門』発行!! prtimes.jp

どのような内容というと、見積もりというエンジニアでは避けて通れないノウハウを合同誌として書いてあります。
私は19章を執筆しました。

第19章 コンシューマーゲームの見積もり(いにしえの記憶より)

まあ、完全にポエムなので、私が書いたの以外を読んでください!
2018年の冬コミなので2年前、懐かしいです。

アフィリエイトリンク

エンジニアのためのオンライン生活ガイドブック (技術の泉シリーズ(NextPublishing))

エンジニアのためのオンライン生活ガイドブック (技術の泉シリーズ(NextPublishing))

  • 発売日: 2020/12/18
  • メディア: オンデマンド (ペーパーバック)