TomoProgの技術書

底辺プログラマーが達人プログラマーになるまで

Azureを使ったXamarin.FormsアプリをiPhoneにインストールしてみた Part2

皆さん
こんにちは、こんばんは
TomoProgです。

Azureを使ったXamarin.FormsアプリをiPhoneにインストールしてみたPart2です。

前回でアプリのダウンロードまで終わったので、今回は実際に実機にインストールしてみたいと思います。

それでは頑張っていきましょう。

ダウンロードしたアプリをXamarin Studioで開く

Downloadボタンを押してアプリをダウンロードしたら、フォルダを開き、ソリューションファイル(.sln)をクリックします。f:id:TomoProg:20160622222154j:plain

ソリューションファイルを開くと自動的にXamarin Studioが開きます。
iPhoneをPCと接続し、左上のDebugモード、Releaseモードを選べるところからRelease | iPhoneを選択します。
選択したらその横にある実行ボタンを押します。
f:id:TomoProg:20160622224347j:plain

ビルドに失敗する・・・

実機で動かす時が来たと言いたいところですが、実はこのまま実行すると・・・
f:id:TomoProg:20160622225907j:plain

Error: No installed provisioning profiles match the installed iOS signing identities.
プロビジョニングプロファイルがインストールされていないというエラーが表示され、実機にインストールが出来ません。

私自身iPhoneアプリに詳しくは無いので、プロビジョニングファイルの詳しい説明は出来ませんが、検索したところアプリケーションのメタ情報や作成者の署名などを書いておくファイルらしいです。

というわけで、プロビジョニングファイルを作成していきます。

プロビジョニングファイルを作成する

プロビジョニングファイルを作成するにはXcodeを使います。
Xcodeを開いたらFile->New->Projectを選択し、新しいプロジェクトを作成します。
プロジェクトはiOS用のプロジェクトであればおそらく何でも構いません。
適当にプロジェクトを作成したら、Bundle Identifierに書かれている内容を確認します。
f:id:TomoProg:20160622234843j:plain

次にXamarin Studioに戻り、Info.plistを開きます。
Info.plistのBundle Identifierを先ほどXcodeで確認したBundle Identifierに書き換えます。
f:id:TomoProg:20160622235515j:plain

これで実機にインストールする環境が整いました!!

実機でアプリを使ってみる

インストールする準備が出来たので、早速実行してみます。
実行すると接続しているiPhoneにインストールされます。
f:id:TomoProg:20160623001450j:plain

アプリを開くとToDoリストアプリが開きます。
f:id:TomoProg:20160623001813j:plain

実際に何かToDoリストに登録してみます。
Item nameにやることを入力して横の「+」ボタンを押すと登録出来ます。
f:id:TomoProg:20160623001952j:plain

AzureでToDoリストのテーブル内容を確認する

登録が出来たので、Azureからテーブルを見てみようと思います。
Azureにログインし、
App Service->作成したアプリ名->設定->Easy Table->TodoItem
を選択します。
選択すると先ほど登録したToDoリストが登録されていることが確認できます。
f:id:TomoProg:20160623003403j:plain

まとめ

今回は2回に分けてAzureを使ったXamarin.FormsアプリをiPhoneにインストールしてみました。
Azureを使うことでバックエンドをほぼ意識せず構築出来ました。
Xamarinを使うときはAzureの選択はありだと思います。

Azureの使い方も少し分かったところで、これからは自作アプリ作りに励もうと思います。

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Azureを使ったXamarin.FormsアプリをiPhoneにインストールしてみた Part1

皆さん
こんにちは、こんばんは
TomoProgです。

Microsoft Azureと連携したXamarin.FormsアプリをiPhoneにインストールすることに成功したので、インストールまでの道のりを何回かに分けて書いていこうと思います。

Visual Studioを使っている人には申し訳ないですが、私がMacユーザーなので、Xamarin Studioを使うことを前提で書きます。

それでは頑張っていきましょう。

Xamarin Studioをインストールしよう

さてインストールのやり方は・・・
と言いたいところですが、ぶっちゃけますとほとんど覚えていません。笑

Microsoftエバンジェリストのちょまどさんのブログに超詳しく書いてあるので、ここを参考にすると良いと思います。
https://blogs.msdn.microsoft.com/chomado/xamarin/getting-started-xamarin-on-mac-for-free/blogs.msdn.microsoft.com
というわけで、
Xamarin Studioのインストールはちょまどさんに任せて次に進みましょう。笑

Microsoft Azureのアカウントを作成しよう

次にAzureのサービスを利用するためにAzureのアカウントを作成します。
アカウント作成にはクレジットカードが必要なので、準備しておきましょう。
azure.microsoft.com

Azureは本来は課金制ですが、無料で使える期間があるので、今回はそれを利用します。
Azureについて詳しく知りたい人はGoogle先生に聞いてみてください。

Microsoft Azureでモバイルアプリを作ろう

さてここまでかなり端折りましたがアプリ開発に入っていきましょう!!
まずは作ったAzureアカウントでAzureにログインします。

ログインしたら新規->Web + モバイル -> Mobile Appからモバイルアプリを作成します。
f:id:TomoProg:20160616224906j:plain
アプリ名は世界で唯一の名前にしないと設定できません。
リソースグループはとりあえずアプリと同じ名前に設定しておきました。
App Service プランは無料のものを選択しています。

作成すると自動でデプロイされるのでデプロイが完了するまで少し待ちます。
デプロイが完了するとこんな感じでメッセージが表示されます。
f:id:TomoProg:20160616225943j:plain

次にApp Service->自分が作成したアプリ名->設定->クイックスタートを選択します。
クイックスタートの検索バーでXamarinを検索し、Xamarin.Formsを選択します。
f:id:TomoProg:20160616230745j:plain

Xamarin.Formsを選択したらまずはデータベースを作成します。
Data Connections->Add data connection->データベース
から新しいデータベースを作成します。
データベースが作成出来たら、Data Connectionが出来るまでしばし待ちましょう。
f:id:TomoProg:20160616233505j:plain

Data Connectionが出来たらCreate a table APIチェックボックスにチェックを入れ、Create TodoItem tableのボタンを押します。
TodoItemテーブルが完成したら、Downloadボタンからアプリをダウンロードします。
f:id:TomoProg:20160616234421j:plain

ここまででAzure側の設定はすべて終了です。
と同時に今日はここまでにしておきます。

次はXamarin Studioでのビルドから実機にインストールするまでを書いていこうと思います。

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Xamarin使ってスマホアプリ開発をやってみようと思う Part0

皆さん
こんにちは、こんばんは
TomoProgです。

気がつけば5月が終わってしまいました。
時が経つのは本当に早いですね。

5月は何を作っていたのか振り返るとDjango掲示板を作成してましたね。

とりあえず、動くものを目指して作ったところ今回は挫折せずに動くものを作ることが出来ました。
PythonBoardという簡単な掲示板です。

http://ik1-326-23085.vs.sakura.ne.jp/PythonBoard/

まだまだ実装していない機能もありますが、次にやりたいことが出てきたので、そっちに移ろうと思います。

次にやりたいことって何よ?
それは・・・

Xamarinを使ったスマホアプリ開発!!

最近Microsoftで話題のちょまどさんの影響でXamarinを使ったアプリ開発をやってみたいと思いました。
twitter.com

こんなアプリ作りたいなという構想はあるので、それを実現できるようなアプリを作っていこうと思います。

今日から頑張っていこう!!

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Djangoを使って掲示板を作ってみる Part2

皆さん
こんにちは、こんばんは
TomoProgです。

久しぶりのDjangoを使って掲示板を作ってみるシリーズを書いていこうと思います。

それでは頑張っていきましょう。

完成した・・・?

こんな風に考えていたんです。
とりあえず、作りながら切りが良いときにブログ書いていくか。

そんなことを思いながら手当たり次第に作っていったところ、

キリがいいところってどこだよ・・・。

となって結局ブログをほぼ更新しませんでした。

しかし、とりあえず動くものを作るという目標は達成せねば・・・

というわけで、とりあえず動くものを作ってみました。

PythonBoardというPython関連のことについて話し合える掲示板です。
http://ik1-326-23085.vs.sakura.ne.jp/PythonBoard

Python関連のことに限定していますが、この記事を見ていただいた方は是非トピック立ててみたり返信してみたり、適当に使ってみてください!!

まだ追加したい機能がいくつかあるので、その時は機能ごとにブログを書いていこうと思います。

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

辞書型のKeyErrorを回避する

皆さん
こんにちは、こんばんは
TomoProgです。

久しぶりにブログ書こうと思います。

今回はPythonの辞書型を使っていると遭遇するKeyErrorについて少し調べてみました。
それでは頑張っていきましょう。

辞書型って何?

KeyErrorの前にまずは辞書型について少し書いておきます。
辞書型とは任意のキーに対して値を持てる型のことです。
他の言語でハッシュマップや連想配列という言葉を聞いたことがある人はそれとほぼ同じ型だと思います。

辞書型を使う場合は波括弧を使って「'キー':'値'」の形で表現します。

#-*- coding:utf-8 -*-

def main():
    person_dict = {'name':'tomoprog', 'age':24, 'blood':'A'}
    print(person_dict['name'])
    print(person_dict['age'])
    print(person_dict['blood'])

if __name__ == "__main__":
    main()
実行結果:
tomoprog
24
A

person_dictという変数に辞書型を定義し、「変数名['Key']」で定義した辞書型の値にアクセスしています。
ちなみに辞書型の値は数値でも文字列でも構いません。

KeyErrorを出力してみる

それでは今回の本題に入っていきましょう。
まずはKeyErrorを実際に起こしてみます。

とは言っても引き起こすのは簡単で、存在しないキーで辞書にアクセスするだけです。
実際にKeyErrorを引き起こしたコードがコチラ

#-*- coding:utf-8 -*-

def main():
    d = {'name':'tomoprog', 'age':24, 'blood':'A'}
    print(d['name'])
    print(d['age'])
    print(d['blood'])
    print(d['height'])

if __name__ == "__main__":
    main()
実行結果:
tomoprog
24
A
Traceback (most recent call last):
  File "dict.py", line 11, in <module>
    main()
  File "dict.py", line 8, in main
    print(d['height'])
KeyError: 'height'

heightという存在しないキーで辞書にアクセスしたためKeyErrorが出力されています。

KeyErrorを回避する

KeyErrorが出力されると強制的にプログラムが終了してしまいます。
強制的に終了されては困る場合はこのKeyErrorを対処しないといけません。

対処する方法としては

  1. 辞書にキーが存在するかを確認してからアクセスする
  2. try-exceptを実装する

この2つの方法が考えられます。

実際に2つの方法で対処してみましょう。

辞書にキーが存在するかを確認してからアクセスする

キーを確認してからアクセスする場合はinまたはgetを使用します。
inを使う場合はもし、キーが辞書にあればというif文を書くことでKeyErrorを回避できます。

#-*- coding:utf-8 -*-

def main():
    d = {'name':'tomoprog', 'age':24, 'blood':'A'}

    if 'age' in d:
        print(d['age'])
    else:
        print("d do not have 'age' key")

    if 'height' in d:
        print(d['height'])
    else:
        print("d do not have 'height' key")

if __name__ == "__main__":
    main()
実行結果:
24
d do not have 'height' key

getを使う場合は辞書型.get()メソッドを使用します。
存在する場合は第1引数、存在しない場合は第2引数を返します。

#-*- coding:utf-8 -*-

def main():
    d = {'name':'tomoprog', 'age':24, 'blood':'A'}
    print(d.get('name', None))
    print(d.get('height', None))

if __name__ == "__main__":
    main()
実行結果:
tomoprog
None

どちらかと言えばgetを使うほうがif文が必要ない分綺麗に書けそうです。

try-exceptを実装する

try-exceptを使用する場合はKeyErrorが出力される部分をtryで囲み、exceptでKeyErrorを捕捉します。

#-*- coding:utf-8 -*-

def main():
    d = {'name':'tomoprog', 'age':24, 'blood':'A'}
    try:
        print(d['height'])
    except KeyError:
        print("KeyError Exception.")

if __name__ == "__main__":
    main()
実行結果:
KeyError Exception.

try-exceptが実装されることで、KeyErrorが出力されたときも強制終了することなく実行できます。

まとめ

今回は辞書型のKeyErrorの回避方法として、いくつか例を上げてみました。
個人的にはgetを使う方法が一番綺麗に簡潔に書けるので好きです。
KeyErrorで詰まった時は是非参考にしてみてください。

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Djangoを使って掲示板を作ってみる Part1

皆さん
こんにちは、こんばんは
TomoProgです。

Djangoを使って掲示板を作ってみる Part0を書いてから3日ほど経過しました。
そろそろPart1を書こうと思います。

それでは頑張っていきましょう。

掲示板に必要なページを考える

まずは掲示板に必要なページを考えていきます。
とりあえず、思いついたものをどんどん書いていきます。

1. トピックの一覧ページ
2. トピックの内容を一覧できるページ
3. トピックを作成するページ
4. トピックの内容に対して返信するページ
5. 使い方の説明をするページ
6. お問い合わせページ
7. ログインページ

かなり大雑把ですが、とりあえずこの7ページを作れば掲示板としては機能しそうかなと思いました。
作っていく間にこれも必要、あれも必要となった場合は臨機応変にいきましょう。

DBを設計する

とりあえず、DBも大雑把に設計してみます。
djangoのmodels.pyに定義した内容は以下の通りです。

from django.db import models

# Create your models here.
class Topic(models.Model):
    """ Topic Table """
    title = models.CharField(max_length=500)
    register_name = models.CharField(max_length=20)
    register_datetime = models.DateTimeField()
    update_name = models.CharField(max_length=20)
    update_datetime = models.DateTimeField()

    def __str__(self):
        return self.title

class TopicDetail(models.Model):
    """ TopicDetail Table """
    title = models.ForeignKey(Topic, on_delete=models.CASCADE)
    text = models.TextField()
    register_name = models.CharField(max_length=20)
    register_datetime = models.DateTimeField()
    update_name = models.CharField(max_length=20)
    update_datetime = models.DateTimeField()

    def __str__(self):
        return self.title

Topicという親テーブルとそれに紐づくTopicDetailという子テーブルを作りました。
Topicテーブルの一覧を表示するページからトピックを選択することで、TopicDetailの内容を表示するページに遷移するようにイメージして作ってみました。

DBに関しても別のテーブルが必要になったり、テーブルのフィールドや属性を変更したくなった時は随時変更していきます。

とにかくざっくり動くものを目指して作っていきます!!

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter

Vimで「;」(セミコロン)を使ってみる

皆さん
こんにちは、こんばんは
TomoProgです。

今日はVimで「;」(セミコロン)の使い方を知らなかったので、ここに書いておこうと思います。

例えば以下の様な例文があったとしましょう。

My favorite programming language is python!!

カーソルが先頭にあったとして、programmingの「p」にカーソルを移動させたいときはどうすればいいでしょうか?

地道に「l」を押して右にカーソルを移動させてもいいですが、今回の例文では「fp」と入力すると瞬時に移動できます。

「f」を押してから任意のキーを押すことで、現在のカーソル位置から前方検索を行い、マッチした場所にカーソルを移動させることが出来ます。

ここまでは知っていたのですが、ここからさらに次の「p」に移動しようと思った時、もう一度「fp」と入力しないと移動できないとずっと思っていました。

しかしそんな面倒なことはしなくていいです。
なぜなら、
「;」を押すことで直前の「f」コマンドを繰り返す事が出来ますから!!

今まで「.」コマンドでなんで「f」コマンドを繰り返せないんだろうと思っていたのですが、「;」だったのですね・・・

それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter