iOSアプリ「Pythonista3」でクラスメソッドのおみくじを占えるようにした

2017.10.25

こんにちは。池田です。AWS事業部合宿2017ではLT大会のトリを務めるという大仕事をやりきりました。
既にお気づきの方も多いと思いますが、プログラミング初心者です。
前回の記事では、めそ子さんとツーショット撮影ができるようにしてみました。
今回はクラスメソッドのおみくじPythonista3で実現しようと思います。

クラスメソッドのおみくじ
今回はiPadAir2でやってみました。

前提条件

  • コードの美しさよりも、まずは期待通りの動作をさせることを目指す。
  • 動くものができたらそれで終わり。ではなく、より美しくより良い記述方法を模索する。
  • 準備

    おみくじ結果で表示させる画像の用意
    クラスメソッドのおみくじページから10種類の画像とコメントを取得して保存。その後、前回の記事で紹介した「Dropbox File Picker V2.py」を利用してDropbox経由でiOS端末へ画像を配置します。今回は、各画像のファイル名を1から10の連番としました。

    コード作成

    画像ファイルと同じディレクトリにスクリプトを作成します。今回はomikuji.pyとしました。

    # -*- coding: utf-8 -*-
    from PIL import Image
    import random
    

    画像を扱うのでPILのImageモジュールと、ランダムな結果が得られるようrandomモジュールを利用します。

    uranai = ['1.png', '2.png', '3.png', '4.png', '5.png', '6.png', '7.png', '8.png', '9.png', '10.png']
    unsei = (random.choice(uranai))   # random の前の ( がコピペミスで抜けていたことに気づきました。20171026修正
    mesoko = Image.open(unsei, 'r')
    mesoko.show()
    

    おみくじの結果は10パターンなので、単純にリストへファイル名を列挙しました。
    次に、10種類のファイル名からひとつをランダムに選びます。
    選んだファイル名の画像ファイルを表示させます。

    if unsei == '1.png':
        print ('開運AWSはAmazon Alexaです。\n力およばず悔しい思いを抱きがち。そんなときこそビルからの景色を眺めたり、しばらく連絡していない人に短いメールを送ってみたりして、ちょっとしたメンテナンスが必要かも。')
    elif unsei == '2.png':
        print ('開運検索エンジンはElasticsearchです。\n「こうだったらいいな」がいくつも叶うような嬉しい気配。足取りも軽やかで楽しい毎日が訪れそう。まわりの人にもおすそ分けすればさらなる相乗効果が期待できるかも?')
    elif unsei == '3.png':
        print ('開運OSSはHadoopです。\n毎日なんとなくのルーチン作業にちょっとしたアイデアを盛り込んで吉。意外な変化の訪れに思わず笑ってしまうかも?まずは日々のWebサービスの設定を見直してみるところから。')
    elif unsei == '4.png':
        print ('開運AWSはAmazon Alexaです。\n力およばず悔しい思いを抱きがち。そんなときこそビルからの景色を眺めたり、しばらく連絡していない人に短いメールを送ってみたりして、ちょっとしたメンテナンスが必要かも。')
    elif unsei == '5.png':
        print ('開運AWSはAuroraです。\n慎重さが求められる時期。打開策は入念な準備と絶やさぬ注意です。忙しくておろそかになりそうなときは、お隣に声をかけてみるのが近道になるかも。協力して乗り越えましょう。')
    elif unsei == '6.png':
        print ('開運プログラミング言語はPythonです。\n先延ばしを繰り返していたものが思わぬ結果に転びそう。残された道は初期化しかないというような状況を避けるためにも、時間を見つけて取り掛かってみては?')
    elif unsei == '7.png':
        print ('開運プログラミング言語はKotlinです。\n「必要十分」がつい口癖になり、要件をクリアすればなんでもいいやなんて思ってしまう今日この頃。たまには背伸びをしてみませんか?新しい世界が見えてくるかもしれません。')
    elif unsei == '8.png':
        print ('開運プログラミング言語はScalaです。\n上昇志向はあるけれど、トップが負う責任は重そう。ほどよい位置にいるという居心地はなかなかのものです。でも心のどこかに「まだまだいけるぞ」とアクセルを踏みたい気持ちも?')
    elif unsei == '9.png':
        print ('開運OSSはDockerです。\nメールやチャットなど、ツールに頼りがちなコミュニケーションに誤解注意報。ちょっと重い腰を上げて直接話しかけてみませんか?「話せばわかる何事も」となりそう。')
    elif unsei == '10.png':
        print ('開運データベースはMongoDBです。\n驚きのニュースが舞い込むかも。臨機応変に動けるように普段から準備運動しておけば、その一報をきっかけに物事がどんどんうまく転んでいく可能性が高いでしょう。')
    else:
        pass
    

    スマートな記述ではないと思いつつもプロトタイプということでif文を使い、選ばれたファイル名に対応するコメントを表示させます。

    コード全体は以下となります。

    # -*- coding: utf-8 -*-
    from PIL import Image
    import random
    
    uranai = ['1.png', '2.png', '3.png', '4.png', '5.png', '6.png', '7.png', '8.png', '9.png', '10.png']
    unsei = (random.choice(uranai))   # random の前の ( がコピペミスで抜けていたことに気づきました。20171026修正
    mesoko = Image.open(unsei, 'r')
    mesoko.show()
    
    if unsei == '1.png':
        print ('開運AWSはAmazon Alexaです。\n力およばず悔しい思いを抱きがち。そんなときこそビルからの景色を眺めたり、しばらく連絡していない人に短いメールを送ってみたりして、ちょっとしたメンテナンスが必要かも。')
    elif unsei == '2.png':
        print ('開運検索エンジンはElasticsearchです。\n「こうだったらいいな」がいくつも叶うような嬉しい気配。足取りも軽やかで楽しい毎日が訪れそう。まわりの人にもおすそ分けすればさらなる相乗効果が期待できるかも?')
    elif unsei == '3.png':
        print ('開運OSSはHadoopです。\n毎日なんとなくのルーチン作業にちょっとしたアイデアを盛り込んで吉。意外な変化の訪れに思わず笑ってしまうかも?まずは日々のWebサービスの設定を見直してみるところから。')
    elif unsei == '4.png':
        print ('開運AWSはAmazon Alexaです。\n力およばず悔しい思いを抱きがち。そんなときこそビルからの景色を眺めたり、しばらく連絡していない人に短いメールを送ってみたりして、ちょっとしたメンテナンスが必要かも。')
    elif unsei == '5.png':
        print ('開運AWSはAuroraです。\n慎重さが求められる時期。打開策は入念な準備と絶やさぬ注意です。忙しくておろそかになりそうなときは、お隣に声をかけてみるのが近道になるかも。協力して乗り越えましょう。')
    elif unsei == '6.png':
        print ('開運プログラミング言語はPythonです。\n先延ばしを繰り返していたものが思わぬ結果に転びそう。残された道は初期化しかないというような状況を避けるためにも、時間を見つけて取り掛かってみては?')
    elif unsei == '7.png':
        print ('開運プログラミング言語はKotlinです。\n「必要十分」がつい口癖になり、要件をクリアすればなんでもいいやなんて思ってしまう今日この頃。たまには背伸びをしてみませんか?新しい世界が見えてくるかもしれません。')
    elif unsei == '8.png':
        print ('開運プログラミング言語はScalaです。\n上昇志向はあるけれど、トップが負う責任は重そう。ほどよい位置にいるという居心地はなかなかのものです。でも心のどこかに「まだまだいけるぞ」とアクセルを踏みたい気持ちも?')
    elif unsei == '9.png':
        print ('開運OSSはDockerです。\nメールやチャットなど、ツールに頼りがちなコミュニケーションに誤解注意報。ちょっと重い腰を上げて直接話しかけてみませんか?「話せばわかる何事も」となりそう。')
    elif unsei == '10.png':
        print ('開運データベースはMongoDBです。\n驚きのニュースが舞い込むかも。臨機応変に動けるように普段から準備運動しておけば、その一報をきっかけに物事がどんどんうまく転んでいく可能性が高いでしょう。')
    else:
        pass
    

    改善点や今後のネタを考える

  • ファイル名とコメントの対応を外部ファイルとして、メインスクリプトのコードをすっきりさせたい。
  • randomモジュールでは、ランダム感がちょっと物足りないから工夫したい。
  • これを元にもうちょっと複雑で面白そうなことに繋げたい。
  • 占い結果を画像付きでSNSに投稿したい。
  • omikuji

    最後に

    これでいつでもめそ子さん占ってもらえるようになりました。
    今後もPythonista3やめそ子さんと楽しい時間を過ごしつつ、初心者から初級者にステップアップできるよう取り組んでいきます。