<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Python | リューブログ</title>
	<atom:link href="https://ryuusan.com/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>https://ryuusan.com</link>
	<description>就活生だった時の気づきや日常の発信のほか、技術ブログとしても運用しています。</description>
	<lastBuildDate>Mon, 09 Nov 2020 02:11:39 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://ryuusan.com/wp-content/uploads/2020/03/cropped-logo-32x32.png</url>
	<title>Python | リューブログ</title>
	<link>https://ryuusan.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Flaskの開発環境をDockerで構築する</title>
		<link>https://ryuusan.com/flaskdocker/</link>
					<comments>https://ryuusan.com/flaskdocker/#respond</comments>
		
		<dc:creator><![CDATA[リューさん]]></dc:creator>
		<pubDate>Fri, 30 Oct 2020 02:57:19 +0000</pubDate>
				<category><![CDATA[プログラミング学習]]></category>
		<category><![CDATA[flask]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://ryuusan.com/?p=383</guid>

					<description><![CDATA[目次 はじめに1. プロジェクトディレクトリを作成する2. requirements.txtを作成する3. Dockerfileを作成する4. docker-compose.ymlを作成する5. 実行するおわりに はじめ [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">1. プロジェクトディレクトリを作成する</a></li><li><a href="#toc3" tabindex="0">2. requirements.txtを作成する</a></li><li><a href="#toc4" tabindex="0">3. Dockerfileを作成する</a></li><li><a href="#toc5" tabindex="0">4. docker-compose.ymlを作成する</a></li><li><a href="#toc6" tabindex="0">5. 実行する</a></li><li><a href="#toc7" tabindex="0">おわりに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>こんにちは。リューさんです。この記事ではタイトルの通り、DockerでFlaskの開発環境を構築する手順を紹介していきます。Flaskの公式サイトは<a href="https://flask.palletsprojects.com/en/1.1.x/">こちら</a>です。</p>



<h2 class="wp-block-heading"><span id="toc2">1. プロジェクトディレクトリを作成する</span></h2>



<p>まず、PC上にプロジェクトディレクトリを作成します。mkdirコマンドを使うか、GUIで作成しても構いません。名前は適当で大丈夫です。今回は<strong>testdir</strong>とでもしておきます。</p>



<p>次に、そのディレクトリ内にPythonファイルを作成し、以下のように記述します。この名前はapp.pyとしておきます。別の名前にしても大丈夫ですが、この後使用するので注意してください。</p>



<pre class="wp-block-code"><code>from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello():
    return 'Hello, World!'


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8000)</code></pre>



<p>このファイルの詳細な説明はまた別の記事に書こうと思いますが、Dockerを利用して環境構築をする際にはファイル末尾の、&#8221;<strong>app.run(debug=True, host=&#8217;0.0.0.0&#8242;, port=8000)</strong>&#8220;という記述を忘れないようにしてください。portの部分は変えても大丈夫ですが、<strong>host=&#8217;0.0.0.0&#8242;</strong>が無いとアクセスすることができません。</p>



<p>ちなみに、Flaskのデフォルトポートは5000番らしいです。</p>



<h2 class="wp-block-heading"><span id="toc3">2. requirements.txtを作成する</span></h2>



<p><strong>requirements.txt</strong>を1で作成したプロジェクトディレクトリ内に作成します。以下のように記述してください。</p>



<pre class="wp-block-code"><code>flask</code></pre>



<p>このファイルでインストールするパッケージを管理します。</p>



<h2 class="wp-block-heading"><span id="toc4">3. Dockerfileを作成する</span></h2>



<p>2.と同様に、プロジェクトディレクトリに<strong>Dockerfile</strong>という名称のファイルを作成します。Dockerfileには以下のように記述してください。</p>



<pre class="wp-block-code"><code>FROM python:3.9-alpine
ADD . /code
WORKDIR /code
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
CMD &#91;"python", "app.py"]</code></pre>



<p>今回はpython3.9のイメージを使います。ファイル末尾のCMD<strong> [&#8220;python&#8221;, &#8220;app.py&#8221;]</strong>の&#8221;app.py&#8221;は1.で作成したpythonのファイル名に置き換えてください。</p>



<h2 class="wp-block-heading"><span id="toc5">4. docker-compose.ymlを作成する</span></h2>



<p>docker-compose.ymlというファイルをプロジェクトディレクトリ内に作成し、以下のように記述してください。</p>



<pre class="wp-block-code"><code>version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/code</code></pre>



<h2 class="wp-block-heading"><span id="toc6">5. 実行する</span></h2>



<p>プロジェクトディレクトリ上で以下のコマンドを実行してください。コンテナが作成されるはずです。</p>



<pre class="wp-block-code"><code>docker-compose up -d</code></pre>



<p>もしこの時にエラーが出て、requirements.txtなどを修正した場合、上のコマンドを打ち直しても変更されません。そのような場合は、以下のようなコマンドを実行しましょう。</p>



<pre class="wp-block-code"><code>docker-compose build
docker-compose up -d</code></pre>



<p>無事コンテナが作成されたら、docker-machine ip [マシン名]で仮想マシンのipアドレスを取得し、ブラウザ上で</p>



<p><strong>&#8220;http://[取得したipアドレス]:8000&#8221;</strong>にアクセスしてください。マシン名は特に変更してない場合、<strong>default</strong>という名前になっているはずです。</p>



<p>アクセスできたら、app.pyで指定した通りhello world!が表示されていると思います。そうなれば成功です！</p>



<h2 class="wp-block-heading"><span id="toc7">おわりに</span></h2>



<p>この記事では、Dockerを利用してFlaskの環境構築を行う手順を紹介しました。使用したOSはWindows10ですが、マック等もそこまで変わらないはずです。</p>



<p>「動かない」「この部分は間違っている」等ご意見ありましたら、僕のTwitter(<a href="https://twitter.com/Ryu_programs">@Ryu_programs</a>)までご連絡いただければ幸いです。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://ryuusan.com/flaskdocker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DjangoのTips</title>
		<link>https://ryuusan.com/django-tips/</link>
					<comments>https://ryuusan.com/django-tips/#respond</comments>
		
		<dc:creator><![CDATA[リューさん]]></dc:creator>
		<pubDate>Mon, 01 Jun 2020 03:21:23 +0000</pubDate>
				<category><![CDATA[プログラミング学習]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://ryuusan.com/?p=282</guid>

					<description><![CDATA[こんにちは。リューさんです。この記事では、Djangoを用いてWebアプリケーションを作成しているときに詰まったこと、困ったこととその解決方法を書いていきます。 目次 ViewsのTipsFormのTipsModelのT [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは。リューさんです。この記事では、Djangoを用いてWebアプリケーションを作成しているときに詰まったこと、困ったこととその解決方法を書いていきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ViewsのTips</a></li><li><a href="#toc2" tabindex="0">FormのTips</a></li><li><a href="#toc3" tabindex="0">ModelのTips</a></li><li><a href="#toc4" tabindex="0">TemplateのTips</a></li><li><a href="#toc5" tabindex="0">おわりに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ViewsのTips</span></h2>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="bold"><span class="fz-22px">form入力後、もとのページにリダイレクトさせたい</span></span></p>
</div>



<p>formが一つの場合、元居たページにリダイレクトさせることは簡単です。しかし、複数ページで同じviewを使う場合、元居たページにリダイレクトさせるためには少し工夫が必要になります。</p>



<p>まず、templateに以下のように記述します。以下の例では、inputのvalueにURLを指定しています。</p>



<pre class="wp-block-code"><code>&lt;form action="{% url 'foo:bar' %}" method="post">
    {% csrf_token %}
    &lt;input type="hidden" name="next" value="{{ request.path }}"/>
    &lt;!--　適当なフォーム -->
    &lt;button class="btn btn-outline-primary" type="submit">send&lt;/button>
&lt;/form></code></pre>



<p>次に、viewでその値を受け取り、受け取ったURLにリダイレクトするようにします。views.pyに以下のように記述します。</p>



<pre class="wp-block-code"><code>from django.http import HttpResponseRedirect
from django.shortcuts import redirect

def foo(request, foo_id):
    # 何らかの処理
    if request.method == "POST":
        next_url = request.POST.get('next', None)
        # 何らかの処理

    if next_url:
        return HttpResponseRedirect(next_url)
    else:
        return redirect('hoge:huga')   #値がうまく取れなかったときの処理</code></pre>



<p>これで上手くいくはずです。試してみてください。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p class="has-medium-font-size"><strong>Post送信後、入力した値をclearしたい</strong></p>
</div>



<p>掲示板アプリなど、Post後に同じページに戻るようなページをDjangoで作っているとき、Postした入力値がformに残っているときがありませんか？また、Post後にF5やリロードすると、再び入力値が入っているなんてことはありませんか？</p>



<p>そんな時は、以下のようにviewでformをsave後にHttpResponseRedirectで同じページにリダイレクトするようにしましょう。また、このようにする場合はformが正常に処理できているか、などもユーザに通知すると良いかもしれません。</p>



<pre class="wp-block-code"><code>if request.method == "POST":
    form = forms.TestForm(request.POST)
        if form.is_valid():
            test = form.save(commit=False)
            test.user = request.user
            test.save()
            return HttpResponseRedirect(request.path)</code></pre>



<h2 class="wp-block-heading"><span id="toc2">FormのTips</span></h2>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="fz-22px"><strong>ラジオボタンをつけたい</strong></span></p>
</div>



<p>こちらは既に素晴らしい記事が多くあるのですが、自分用に書きます。</p>



<p>まず、今回は0,1…のような数字でvalueを管理したいと思っているので、models.pyに以下のように記述します。</p>



<pre class="wp-block-code"><code>from django.db import models

class Hoge(models.Model):     
     hoge = models.IntegerField(default=0)</code></pre>



<p>次に、forms.pyに以下のように記述します。</p>



<pre class="wp-block-code"><code>from . import models
from django import forms

hoge_choice = &#91;
    (0, 'hello'),
    (1, 'world'),
    (2, '!!!!!'),
]

class HogeForm(forms.ModelForm):
    hoge = forms.ChoiceField(
        widget=forms.RadioSelect,
        label='hoge',
        choices=hoge_choice,
    )

    class Meta:
        model = models.Hoge
        fields = ('hoge',)
        label = {
            'hoge': 'ほげ',
        }</code></pre>



<p>あとはviews.pyにこのHogeFormを渡して、以下のようにtemplateに記述すればラジオボタンが実装できるはずです。以下の例はbootstrap4を用いた例ですので、適宜修正してください。</p>



<pre class="wp-block-code"><code>{{ form.hoge.label_tag }}
&lt;div class="border-top border-bottom">
{% for radio in form.hoge %}
    &lt;div class="custom-control custom-radio pt-1 pb-1">
        {{ radio.tag }}
        &lt;label class="custom-control-label" for="{{ radio.id_for_label }}">
            {{ radio.choice_label }}
        &lt;/label>
    &lt;/div>
{% endfor %}
&lt;/div></code></pre>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-22px">フォームのタイプに合わせてデザインを変えたい</span></strong></p>
</div>



<p>templateファイルに以下のようにif文で分岐させるように記述することで実現できます。</p>



<pre class="wp-block-code"><code>{% for field in form %}
    {% if field.field.widget.input_type == "checkbox" %}
    	&lt;div class="form-check">
    	    {{ field.label_tag }}
            {{ field }}
            {{ field.errors }}
        &lt;/div>  
    {% else %}
    	&lt;div class="form-group">
    	    {{ field.label_tag }}
            {{ field }}
            {{ field.errors }}
        &lt;/div>
    {% endif %}
{% endfor %}</code></pre>



<p>ただ、Bootstrapを使う場合、Djangoはulタグで囲まれたformを返してくるのでいい感じにすることができません。そのような場合はカスタムウイジェットを作ることで対応できます。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-22px">フォームのウィジェットを変更したい</span></strong></p>
</div>



<p>forms.py に以下のように記述します。以下の例は__init__で変更していますが、Metaやviewで変更する方法もあります。</p>



<pre class="wp-block-code"><code>class Meta:
    model = models.Hoge
    fields = ('hoge', 'huga')

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields&#91;'hoge'].widget = forms.CheckboxSelectMultiple()
    self.fields&#91;'hoge'].queryset = self.fields&#91;'hoge'].queryset.filter(hoge__gte=2)</code></pre>



<h2 class="wp-block-heading"><span id="toc3">ModelのTips</span></h2>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="fz-22px"><strong>カスタムユーザモデルを作成する</strong></span></p>
</div>



<p>Djangoの場合ベースのユーザモデルのままだと、開発している途中で「ユーザモデルに年齢や役職を持たせたい！」と思っても、データベースを初期化したり、マイグレーションをごにょごにょしたりしなければ変更できなかったりします。</p>



<p>そこで、カスタムユーザモデルの出番です。今回はより簡単な<strong>AbstractUser</strong>を継承して作成しましょう。models.pyに以下のように記述します。</p>



<pre class="wp-block-code"><code>class CustomUser(AbstractUser):
    UserAuth = &#91;
        (0, 'student'),
        (1, 'TA'),
        (2, 'teacher'),
    ]
    user_auth = models.IntegerField(verbose_name='権限', default=0, choices=UserAuth)</code></pre>



<p>今回は上のようにカスタムユーザモデルに権限のフィールドを追加しました。このように一度カスタムユーザモデルを追加しておけば、以降はそのモデルに追記していけばいいので、必ず作成しておきましょう。</p>



<p>また、追記していくタイプの<strong>AbstractUser</strong>だけではなく、最初から設定されている属性の削除や変更等も行うことができる<strong>AbstractBaseUser</strong>を継承してカスタムユーザモデルを作成することも出来ます。ご自身が作成したいアプリに合わせて利用しましょう。</p>



<h2 class="wp-block-heading"><span id="toc4">TemplateのTips</span></h2>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="fz-22px"><strong>submitボタンが押せないとき</strong></span></p>
</div>



<p>ブラウザで検証してみましょう。</p>



<p><span class="bold"><span class="fz-18px">An invalid form control with name=&#8217;hoge&#8217; is not focusable.</span></span></p>



<p>というエラーが出ていませんか？この場合、おそらくformの部品に　<strong><span class="fz-16px">display:none;</span></strong>　というcssが指定されていると思います。display:none;の代わりに、以下のコードを追加しましょう。</p>



<pre class="wp-block-code javascript"><code>var icon_css = {
            visibility:'hidden',
            width:'0',
            height:'0',
        }
$('div.form-group input&#91;name="hoge"]').css(icon_css);</code></pre>



<p>この場合は、jqueryを用いてcssを追加していますが、方法は何でも良いです。</p>



<h2 class="wp-block-heading"><span id="toc5">おわりに</span></h2>



<p>この記事は公開した後もTipsを学び次第更新していきます。もし、間違えている箇所等ありましたらTwitter(<a href="https://twitter.com/Ryu_programs">@Ryu_programs</a>)までお願いします。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ryuusan.com/django-tips/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Djangoで簡単な「文字カウントメモ」を作ってみる</title>
		<link>https://ryuusan.com/django3/</link>
					<comments>https://ryuusan.com/django3/#respond</comments>
		
		<dc:creator><![CDATA[リューさん]]></dc:creator>
		<pubDate>Sat, 16 May 2020 05:52:48 +0000</pubDate>
				<category><![CDATA[プログラミング学習]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://ryuusan.com/?p=254</guid>

					<description><![CDATA[こんにちは。リューさん(@Ryu_programs)です。この記事では以下のような人に向けてDjangoで簡単なWebアプリを作成していきます。 Djangoの学習をしたいけど、何から始めれば良いのか分からない Pyth [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは。リューさん(<a href="https://twitter.com/Ryu_programs">@Ryu_programs</a>)です。この記事では以下のような人に向けてDjangoで簡単なWebアプリを作成していきます。</p>


<div class="blank-box bb-tab bb-point bb-blue">
<ul>
<li>Djangoの学習をしたいけど、何から始めれば良いのか分からない</li>
<li>Pythonを使って何か作ってみたい</li>
<li>プログラミングについて興味がある</li>
</ul>
</div>


<p>また、この記事は以前の記事の続きです。まだ読んでいない場合は、是非読んでみてください。</p>



<a href="https://ryuusan.com/django1/" title="Django学習 ~Django紹介編~" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Django学習 ~Django紹介編~</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、DjangoやWebフレームワークについて分かりやすく紹介しています。DjangoとはPythonのWebフレームワークで、利用することで簡単にWebアプリを作成できます。また、この記事の後に環境構築編や開発編などが続きます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.04.06</div></div></div></div></a>


<p>Dockerを用いて環境構築する場合はこの記事がお勧めです。</p>



<a href="https://ryuusan.com/django2/" title="Django学習　～環境構築編～" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Django学習　～環境構築編～</div><div class="blogcard-snippet internal-blogcard-snippet">この記事は紹介編の続きの記事であり、DockerでPythonのWebフレームワークであるDjangoの開発環境構築を分かりやすく説明しています。Djangoを学んでみたい方、Pythonで何か作ってみたいと思っている方は読んでみてください。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.04.07</div></div></div></div></a>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">アプリケーションを作成する</a></li><li><a href="#toc2" tabindex="0">settings.pyを変更する</a></li><li><a href="#toc3" tabindex="0">モデルを変更する</a></li><li><a href="#toc4" tabindex="0">views.pyを確認用に変更する</a></li><li><a href="#toc5" tabindex="0">URL関連の設定を行う</a></li><li><a href="#toc6" tabindex="0">アプリにアクセスする</a></li><li><a href="#toc7" tabindex="0">base.htmlを作成する</a></li><li><a href="#toc8" tabindex="0">一覧表示テンプレートを作成する</a></li><li><a href="#toc9" tabindex="0">データを追加できるようにする</a></li><li><a href="#toc10" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">アプリケーションを作成する</span></h2>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="bold"><span class="fz-22px">countmemoアプリケーションを作成する</span></span></p>
</div>



<p>まず、manage.pyと同じディレクトリ上で以下のコマンドを実行し、<span class="bold">countmemo</span>アプリケーションを作成しましょう。</p>



<pre class="wp-block-code"><code>$ python3 manage.py startapp countmemo</code></pre>



<p>このコードはDockerを利用している場合、以下のようなコードになります。</p>



<pre class="wp-block-code"><code>$ docker-compose run web ./manage.py startapp countmemo</code></pre>



<p>上のコードを実行すると、<span class="bold">countmemo</span>ディレクトリが作成され、その中に<span class="bold">models.py</span>や<span class="bold">views.py</span>が入っているはずです。以下は<a href="https://paiza.cloud/ja/">PaizaCloud</a>のスクリーンショットなので、表示形式は少し違うかもしれませんが、このようなファイル構成になっていれば問題ありません。<span class="bold">example</span>はプロジェクト名です。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="211" height="332" src="https://ryuusan.com/wp-content/uploads/2020/05/file.jpg" alt="" class="wp-image-257" srcset="https://ryuusan.com/wp-content/uploads/2020/05/file.jpg 211w, https://ryuusan.com/wp-content/uploads/2020/05/file-191x300.jpg 191w" sizes="(max-width: 211px) 100vw, 211px" /></figure></div>



<h2 class="wp-block-heading"><span id="toc2">settings.pyを変更する</span></h2>



<p>その後、<span class="bold">settings.py</span>に新しいアプリを作成したことを教えてあげましょう。<span class="marker">settings.py内のINSTALLED_APPS</span>に以下のように&#8217;countmemo.apps.CountmemoConfig&#8217;を記述します。</p>



<pre class="wp-block-code python"><code>INSTALLED_APPS = &#91;
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'countmemo.apps.CountmemoConfig',
]</code></pre>



<h2 class="wp-block-heading"><span id="toc3">モデルを変更する</span></h2>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="bold"><span class="fz-22px">models.pyを変更する</span></span></p>
</div>



<p>次に、<span class="marker">countmemoフォルダ内のmodels.py</span>を書き換えていきます。このmodels.pyを元にDjangoがデータベースを操作してくれるので、非常に大事なファイルです。今回は以下のように記述していきます。</p>



<pre class="wp-block-code python"><code>from django.db import models
from django.utils import timezone

# Create your models here.
class MemoModel(models.Model):
    memo_text = models.CharField(max_length=200)
    up_date = models.DateTimeField(default=timezone.now)
    length = models.IntegerField(default=0)

    def __str__(self):
        return self.memo_text</code></pre>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="bold"><span class="fz-22px">マイグレーションを行う</span></span></p>
</div>



<p>models.pyに追記したらマイグレーションを実行しましょう。こうすることでDBに変更を加えます。<span class="bold">models.py</span>を変更した場合は必ず行っておけば間違いありません。</p>



<p>manage.pyと同階層で以下のコマンドを実行します。</p>



<pre class="wp-block-code"><code>$ python3 manage.py make migrations
$ python3 manage.py migrate</code></pre>



<p>Dockerの場合は、以下のようなコマンドになります。</p>



<pre class="wp-block-code"><code>$ docker-compose run web ./manage.py make migrations
$ docker-compose run web ./manage.py migrate</code></pre>



<h2 class="wp-block-heading"><span id="toc4">views.pyを確認用に変更する</span></h2>



<p>countmemoフォルダ内の<span class="bold">views.py</span>を以下のように変更しましょう。</p>



<pre class="wp-block-code python"><code>from django.shortcuts import render
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world!!!!!")</code></pre>



<p><span class="marker-under">views.pyは簡単に言えば<span class="bold">アプリの処理に関する役割</span>を担います。</span>今回は確認のために、<span class="bold">Hello, world!!!!!と表示する</span>ように記述しています。</p>



<h2 class="wp-block-heading"><span id="toc5">URL関連の設定を行う</span></h2>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="bold"><span class="fz-22px">countmemoアプリ内にurls.pyを作成する</span></span></p>
</div>



<p><span class="bold">views.py</span>を変更したら、次は<span class="bold">urls.py</span>を変更してアクセスできるようにしましょう。まず、<span class="bold">countmemo</span>フォルダ内に<span class="bold">urls.py</span>というファイルを作成し、以下のように記述します。</p>



<p>また、<span class="bold">app_name</span>を記述することで、アプリが大量になったときにviews.pyやテンプレートファイルからアクセスしやすくなります。記述しておきましょう。</p>



<pre class="wp-block-code python"><code>from django.urls import path

from . import views

app_name = 'countmemo'
urlpatterns = &#91;
    path('', views.index, name='index'),
]</code></pre>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="bold"><span class="fz-22px">プロジェクト内のurls.pyを変更する</span></span></p>
</div>



<p>僕の場合は、<span class="bold">example</span>というプロジェクト名なので、<span class="marker">exampleフォルダの中のurls.py</span>を変更していきます。こうすることで、countmemoアプリ内のurls.pyを読み込むようになります。</p>



<pre class="wp-block-code python"><code>from django.contrib import admin
from django.urls import path,include

urlpatterns = &#91;
    path('admin/', admin.site.urls),
    path('', include('countmemo.urls')),
]</code></pre>



<h2 class="wp-block-heading"><span id="toc6">アプリにアクセスする</span></h2>



<p>runserverコマンドを実行しましょう。</p>



<p>Dockerの場合は以下の、以前の記事で説明したURLに、それ以外の環境を使っている場合は環境構築時にDjangoのロケットが表示されていたURLにアクセスしてみてください。</p>



<a href="https://ryuusan.com/django2/" title="Django学習　～環境構築編～" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Django学習　～環境構築編～</div><div class="blogcard-snippet internal-blogcard-snippet">この記事は紹介編の続きの記事であり、DockerでPythonのWebフレームワークであるDjangoの開発環境構築を分かりやすく説明しています。Djangoを学んでみたい方、Pythonで何か作ってみたいと思っている方は読んでみてください。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.04.07</div></div></div></div></a>


<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://ryuusan.com/wp-content/uploads/2020/05/hello-world-1024x586.jpg" alt="" class="wp-image-261" width="569" height="325" srcset="https://ryuusan.com/wp-content/uploads/2020/05/hello-world-1024x586.jpg 1024w, https://ryuusan.com/wp-content/uploads/2020/05/hello-world-300x172.jpg 300w, https://ryuusan.com/wp-content/uploads/2020/05/hello-world-768x439.jpg 768w, https://ryuusan.com/wp-content/uploads/2020/05/hello-world-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/05/hello-world-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/05/hello-world.jpg 1135w" sizes="(max-width: 569px) 100vw, 569px" /></figure></div>



<p>トリミングしているため分かりづらいですが、上記のようにHello, world!!!!!と表示されていれば成功です。次のステップへと進みましょう。</p>



<h2 class="wp-block-heading"><span id="toc7">base.htmlを作成する</span></h2>



<p>次に、base.htmlを作成します。まず、countmemoフォルダの中にtemplatesフォルダを作成し、さらにそのtemplatesフォルダの中にcountmemoフォルダを作成しましょう。</p>



<p>そして、countmemoフォルダの中にbase.htmlを作成します。</p>



<p>現在、<span class="bold">countmemo &gt; templates &gt; countmemo &gt; base.html</span>のようになっているはずです。そうであればbase.htmlに以下のように追記していきます。今回はbootstrap4を使うので、そちらもbase.htmlで読み込んでいきます。</p>



<pre class="wp-block-code"><code>&lt;!doctype html>
&lt;html lang="ja">
    &lt;head>
        &lt;title>{% block title %}{% endblock %}&lt;/title>
        &lt;!-- Required meta tags -->
        &lt;meta charset="utf-8">
        &lt;meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        &lt;!-- Bootstrap CSS -->
        &lt;link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
    &lt;/head>
    &lt;body>
        {% block content %}
        {% endblock %}

        &lt;script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous">&lt;/script>
        &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous">&lt;/script>
        &lt;script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous">&lt;/script>
        {% block extrajs %}
        {% endblock %}
    &lt;/body>
&lt;/html></code></pre>



<p>base.htmlは他のhtmlファイルのひな型のようなものです。用いることで大幅にコードを減らすことができます。</p>



<h2 class="wp-block-heading"><span id="toc8">一覧表示テンプレートを作成する</span></h2>



<p><span class="marker-under">countmemoフォルダ内のviews.pyを以下のように変更します。</span>generic.ListViewはデータ一覧を表示したい時に使うと便利です。テンプレートファイルには、object_listという名前でデータが渡されます。</p>



<pre class="wp-block-code"><code>from django.shortcuts import render
from django.views import generic

from .models import MemoModel

class MemoListView(generic.ListView):
    model = MemoModel
　　template_name = 'countmemo/memolist.html'</code></pre>



<p>views.pyを変更したので、同じく<span class="marker-under">countmemoフォルダ内のurls.pyを以下のように変更します。</span>classベースのviewを使った場合は、以下のようにas_view()をつけるようにしましょう。</p>



<pre class="wp-block-code"><code>from django.urls import path

from . import views

app_name = 'countmemo'
urlpatterns = &#91;
    path('', views.MemoListView.as_view(), name='index'),
]</code></pre>



<p>MemoListViewのための<span class="marker-under">memolist.htmlを、templateフォルダ内のcountmemoフォルダ内に作成します。</span>object_listで渡されたデータをfor文を用いて順に取り出し、テーブルの形にまとめています。</p>



<pre class="wp-block-code"><code>{% extends 'countmemo/base.html' %}

{% block title %} memolist {% endblock %}

{% block content %}
    &lt;table class="table">
        &lt;thead>
            &lt;tr>
                &lt;th>#&lt;/th>
                &lt;th>テキスト&lt;/th>
                &lt;th>文字長&lt;/th>
                &lt;th>作成日&lt;/th>
            &lt;/tr>    
        &lt;/thead>
        &lt;tbody>
            {% for data in object_list %}
                &lt;tr>
                    &lt;th>{{ data.id }}&lt;/th>
                    &lt;th>{{ data.memo_text }}&lt;/th>
                    &lt;th>{{ data.length }}&lt;/th>
                    &lt;th>{{ data.up_date }}&lt;/th>
                &lt;/tr>
            {% endfor %}
        &lt;/tbody>
    &lt;/table>
{% endblock %}</code></pre>



<p>ここまで完了したら、以下のコマンドでサーバーを動かしましょう。</p>



<pre class="wp-block-code"><code>$ python3 manage.py runserver</code></pre>



<p>Dockerの場合は次のようなコマンドになります。ただ、Dockerの場合はdocker-compose up -dで既にrunserverを実行していると思うので、必要ないかもしれません。</p>



<pre class="wp-block-code"><code>$ docker-compose run web ./manage.py runserver</code></pre>



<p>先ほどのURLにアクセスし、以下のようになっていれば成功です。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="437" src="https://ryuusan.com/wp-content/uploads/2020/05/table-example-1024x437.jpg" alt="" class="wp-image-267" srcset="https://ryuusan.com/wp-content/uploads/2020/05/table-example-1024x437.jpg 1024w, https://ryuusan.com/wp-content/uploads/2020/05/table-example-300x128.jpg 300w, https://ryuusan.com/wp-content/uploads/2020/05/table-example-768x327.jpg 768w, https://ryuusan.com/wp-content/uploads/2020/05/table-example-1536x655.jpg 1536w, https://ryuusan.com/wp-content/uploads/2020/05/table-example.jpg 1658w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span id="toc9">データを追加できるようにする</span></h2>



<p>まず、<span class="marker-under">views.pyに次のように記述します</span>。</p>



<pre class="wp-block-code python"><code>from django.shortcuts import render, redirect
from django.views import generic

from .models import MemoModel

class MemoListView(generic.ListView):
    model = MemoModel
    template_name = 'countmemo/memolist.html'
    

class CreateMemo(generic.CreateView):
    model = MemoModel
    fields = &#91;'memo_text',]
    template_name = 'countmemo/memoadd.html'
    
    def form_valid(self, form):
        memo = form.save(commit=False)
        memo.length = len(memo.memo_text)
        memo.save()
        return redirect('countmemo:index')</code></pre>



<p>変更点はCreateMemo以下です。この場合、models.pyで指定したmemo_textのみを入力し、lengthに入力された値の文字列長を格納するようにしています。</p>



<p>form_validは入力された文字列が要件を満たすときに呼び出されます。</p>



<p>次に、<span class="marker-under">アプリの方のurls.pyを以下のように変更します。</span></p>



<pre class="wp-block-code python"><code>from django.urls import path

from . import views

app_name = 'countmemo'
urlpatterns = &#91;
    path('', views.MemoListView.as_view(), name='index'),
    path('add/', views.CreateMemo.as_view(), name='add'),
]</code></pre>



<p>こちらも、変更点はview.CreateMemo.as_view()の部分だけです。</p>



<p><span class="marker-under">以前作成したmemolist.htmlにデータ追加ページに遷移するためのボタンを設置します。</span>追記する場所はどこでもいいです。僕はテーブルの下のところに設置しました。</p>



<pre class="wp-block-code"><code>&lt;a class="btn btn-primary d-block d-md-inline-block mb-2 mb-md-0" 
href="{% url 'countmemo:add' %}" role="button">追加&lt;/a></code></pre>



<p><span class="marker-under">その後、memoadd.htmlをmemolist.htmlやbase.htmlと同じフォルダに作成し、以下のように記述します。</span></p>



<pre class="wp-block-code"><code>{% extends 'countmemo/base.html' %}

{% block title %} memoadd {% endblock %}

{% block content %}
    &lt;form method="post">
    {% csrf_token %}

    {{ form }}
    &lt;button class="btn btn-primary" type="submit">save&lt;/button>
    &lt;/form>
{% endblock %}</code></pre>



<p>bootstrapを適用させるにはformの内容をひとつづつ記述し、classを追加するか、javascriptやforms.py等で自動的に追加するかなどの作業が必要なのですが、今回は省きます。また、それらの記事も書くかもしれません。</p>



<p>ここまで終わったら、runserverコマンドを実行してWebアプリを動かしてみましょう。先ほどの画面に追加ボタンが現れているはずです。そのボタンをクリックしてください。以下の写真のようになっていれば成功です。</p>



<figure class="wp-block-image size-large is-style-default"><img loading="lazy" decoding="async" width="1024" height="515" src="https://ryuusan.com/wp-content/uploads/2020/05/memo-add-1024x515.jpg" alt="" class="wp-image-271" srcset="https://ryuusan.com/wp-content/uploads/2020/05/memo-add-1024x515.jpg 1024w, https://ryuusan.com/wp-content/uploads/2020/05/memo-add-300x151.jpg 300w, https://ryuusan.com/wp-content/uploads/2020/05/memo-add-768x386.jpg 768w, https://ryuusan.com/wp-content/uploads/2020/05/memo-add-1536x773.jpg 1536w, https://ryuusan.com/wp-content/uploads/2020/05/memo-add.jpg 1578w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>上手く動いていたら適当に入力してみてください。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="486" src="https://ryuusan.com/wp-content/uploads/2020/05/memo-add-success-1-1024x486.jpg" alt="" class="wp-image-273" srcset="https://ryuusan.com/wp-content/uploads/2020/05/memo-add-success-1-1024x486.jpg 1024w, https://ryuusan.com/wp-content/uploads/2020/05/memo-add-success-1-300x142.jpg 300w, https://ryuusan.com/wp-content/uploads/2020/05/memo-add-success-1-768x365.jpg 768w, https://ryuusan.com/wp-content/uploads/2020/05/memo-add-success-1-1536x729.jpg 1536w, https://ryuusan.com/wp-content/uploads/2020/05/memo-add-success-1.jpg 1599w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>このように、うまくカウントできていれば成功です。</p>



<h2 class="wp-block-heading"><span id="toc10">まとめ</span></h2>



<p>どうでしたか？Djangoを使えば、慣れてしまえば簡単なアプリをこのように30分程度で作れてしまいます。もちろん、今回のアプリはデザインも機能も優れているとは言い難いですが、Djangoのすごさを少しでも分かってもらえたのではないでしょうか。</p>



<p>もし、「ここが分からない」「分かりづらい」などありましたら、Twitter(<a href="https://twitter.com/Ryu_programs">@Ryu_programs</a>)までよろしくお願いします。</p>



<p>また、今回利用したPythonの学習方法などもブログに書いています。よろしければ読んでみてください。</p>



<a href="https://ryuusan.com/python-study/" title="Pythonの勉強方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/python-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/python-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/python-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/python-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの勉強方法</div><div class="blogcard-snippet internal-blogcard-snippet">最近人気沸騰中のプログラミング言語、Pythonの紹介から、Pythonの勉強方法まで詳細に説明していきます。初学者向けの記事ですが、初学者はもちろん、プログラミング経験者でPythonをまだ勉強していない方に対してもおすすめできる内容です。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.03.10</div></div></div></div></a>


<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://ryuusan.com/django3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Django学習　～環境構築編～</title>
		<link>https://ryuusan.com/django2/</link>
					<comments>https://ryuusan.com/django2/#respond</comments>
		
		<dc:creator><![CDATA[リューさん]]></dc:creator>
		<pubDate>Tue, 07 Apr 2020 08:55:07 +0000</pubDate>
				<category><![CDATA[プログラミング学習]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://ryuusan.com/?p=237</guid>

					<description><![CDATA[こんにちは。はじめまして。リューさん(@ryu_programs)です。この記事では以下のような人に向けて、Dockerを利用したDjangoの開発環境構築について説明していきます。 Djangoの学習をしたいけど、どう [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは。はじめまして。リューさん(<a href="https://twitter.com/ryu_programs">@ryu_programs</a>)です。この記事では以下のような人に向けて、Dockerを利用したDjangoの開発環境構築について説明していきます。</p>


<div class="blank-box bb-tab bb-point bb-blue">
<ol>
<li>Djangoの学習をしたいけど、どうすればいいのか分からない</li>
<li>Djangoの環境構築につまづいている</li>
<li>紹介編を見て、Djangoを学習しようと思った</li>
</ol>
</div>


<p>また、Djangoの紹介記事やPythonの勉強方法も書いています。もしまだ読んでいない方がいれば、読んでみてください。</p>



<a href="https://ryuusan.com/django1/" title="Django学習 ~Django紹介編~" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Django学習 ~Django紹介編~</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、DjangoやWebフレームワークについて分かりやすく紹介しています。DjangoとはPythonのWebフレームワークで、利用することで簡単にWebアプリを作成できます。また、この記事の後に環境構築編や開発編などが続きます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.04.06</div></div></div></div></a>

<a href="https://ryuusan.com/python-study/" title="Pythonの勉強方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/python-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/python-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/python-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/python-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの勉強方法</div><div class="blogcard-snippet internal-blogcard-snippet">最近人気沸騰中のプログラミング言語、Pythonの紹介から、Pythonの勉強方法まで詳細に説明していきます。初学者向けの記事ですが、初学者はもちろん、プログラミング経験者でPythonをまだ勉強していない方に対してもおすすめできる内容です。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.03.10</div></div></div></div></a>


<p>また、続編であるWebアプリ作成編も公開しました。良ければ読んでみてください。リンクは最後の方にも載せておきます。</p>



<a href="https://ryuusan.com/django3/" title="Djangoで簡単な「文字カウントメモ」を作ってみる" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Djangoで簡単な「文字カウントメモ」を作ってみる</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、「Djangoを勉強したい！」「Pythonで何か作ってみたい」という人に向けて、Djangoを用いた簡単なWebアプリ作成の方法を実際に一緒に作りながら紹介していきます。プログラミング学習の助けになれば幸いです。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.05.16</div></div></div></div></a>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">なぜDockerを選んだか</a></li><li><a href="#toc2" tabindex="0">最初にすべきこと</a></li><li><a href="#toc3" tabindex="0">Djangoの環境構築</a></li><li><a href="#toc4" tabindex="0">おわりに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">なぜDockerを選んだか</span></h2>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="400" height="331" src="https://ryuusan.com/wp-content/uploads/2020/04/docker.jpg" alt="" class="wp-image-238" srcset="https://ryuusan.com/wp-content/uploads/2020/04/docker.jpg 400w, https://ryuusan.com/wp-content/uploads/2020/04/docker-300x248.jpg 300w" sizes="(max-width: 400px) 100vw, 400px" /></figure></div>



<p>まず、Pythonという言語はモジュールをimportすることによって、機械学習やWebクローリング、Django開発など様々なことを行うことができます。また、所謂本家PythonであるPython3だけではなく、科学計算に強いAnacondaや、もしかするとやむにやまれぬ事情があってPython2をいまだに使われている人もいるかもしれません。</p>



<p>こう聞くとPythonを使ってそのまま開発していたら、ライブラリの数や環境がめちゃくちゃなことになると思いませんか？そこで登場するのが仮想マシンやDockerです。仮想マシンとDockerも仕組みが違うのですが、今回は単に僕の好きなツールであり、軽量かつ高速であるDockerを採用しました。</p>



<h2 class="wp-block-heading"><span id="toc2">最初にすべきこと</span></h2>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="640" height="427" src="https://ryuusan.com/wp-content/uploads/2020/04/pc-1.jpg" alt="" class="wp-image-240" srcset="https://ryuusan.com/wp-content/uploads/2020/04/pc-1.jpg 640w, https://ryuusan.com/wp-content/uploads/2020/04/pc-1-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></figure></div>



<p>まず、こちらの公式ドキュメント(<a href="https://docs.docker.com/toolbox/toolbox_install_windows/">https://docs.docker.com/toolbox/toolbox_install_windows/</a>)を参考にしながら、Docker Toolboxをインストールしましょう。ちなみに、僕はWindows10 homeだったのでDocker Toolboxをインストールしたのですが、Macの場合は<a href="https://hub.docker.com/editions/community/docker-ce-desktop-mac">Docker for Mac</a>であったり、Windows10 Proであれば<a href="https://hub.docker.com/editions/community/docker-ce-desktop-windows">Docker for Windows</a>があるので、ご使用のPCによって変えましょう。</p>



<p>また、Docker Toolboxの場合はVirtualBoxを一度アンインストールしてからインストールすると良いかもしれません。Docker Toolboxをインストールすると勝手にVirtualBoxまで付いてくるので、既に存在しているとエラーが出る可能性があります。僕がインストールした時にはそこでエラーが出て躓きました。</p>



<p>詳しいインストール方法を紹介している記事はすでにたくさんありますし、OSによってもインストール方法が違う可能性があるのでこの記事では省略します。Docker Toolboxのインストールの際、参考になった記事を紹介しておきます。</p>



<a rel="noopener" href="https://qiita.com/KIYS/items/8ac37f6757a6b7f84569" title="Windows環境にDocker Toolboxをインストールする - Qiita" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fqiita.com%2FKIYS%2Fitems%2F8ac37f6757a6b7f84569?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Windows環境にDocker Toolboxをインストールする - Qiita</div><div class="blogcard-snippet external-blogcard-snippet">はじめに Docker、非常に便利ですね。Dockerを使用すればローカル環境を汚すことなく、様々なアプリケーションを実行できたりしてしまいます。Dockerに関する記事はネット上に豊富にありますが、いかんせん界隈の技術の進歩も早くすぐに情...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://qiita.com/KIYS/items/8ac37f6757a6b7f84569" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">qiita.com</div></div></div></div></a>


<h2 class="wp-block-heading"><span id="toc3">Djangoの環境構築</span></h2>



<p>Dockerのインストールが終わると、次にDjangoの開発環境を整えていきます。この際、もしPycharmやVScodeなどのエディタをインストールしていない場合、しておくことをお勧めします。ちなみに僕はPythonを使うならPycharmが好きです。</p>



<a rel="noopener" href="https://www.jetbrains.com/ja-jp/pycharm/" title=" PyCharm - 唯一の必携 Python IDE " class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://ryuusan.com/wp-content/uploads/cocoon-resources/blog-card-cache/31f0610a3d1cfde6a8b72227bbdd0107.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title"> PyCharm - 唯一の必携 Python IDE </div><div class="blogcard-snippet external-blogcard-snippet">ウェブ、データ、および AI/ML のプロ開発者向けに構築。 AI による IDE エクスペリエンスで強化されています。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.jetbrains.com/ja-jp/pycharm/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.jetbrains.com</div></div></div></div></a>


<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">1.</span><span class="fz-28px">作業ディレクトリの作成</span></strong></p>
</div>



<p>Djangoプロジェクトが格納されるディレクトリを適当な場所に作成します。ただし、この時は作成するだけでそのディレクトリは空にしておきましょう。そして、Docker Toolboxを起動し、cdコマンドでそのディレクトリに移動します。</p>



<p>この後いくつかのファイルを作成しますが、僕はviコマンドを利用して作成しました。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">2.Dockerfileの作成</span></strong></p>
</div>



<p>次に、Dockerfileをそのディレクトリの中に作成します。Dockerfileは、そこに記述された内容に基づいてDockerイメージを作成します。Dockerfileについて、より詳しく知りたい方は以下の記事を読んでみてください。</p>



<a rel="noopener" href="https://knowledge.sakura.ad.jp/15253/" title="Docker入門（第四回）～Dockerfileについて～  |  さくらのナレッジ" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://ryuusan.com/wp-content/uploads/cocoon-resources/blog-card-cache/1eceebfd6f1eae9fb4b080a64b8a4b36.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Docker入門（第四回）～Dockerfileについて～  |  さくらのナレッジ</div><div class="blogcard-snippet external-blogcard-snippet">こんにちは、Acroquest Technologyの横山です。 4/19(木)にKubernetesやDockerを中心としたコンテナ活用の現状をひとまとめにした開発者のためのイベントである「Japan Contain</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://knowledge.sakura.ad.jp/15253/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">knowledge.sakura.ad.jp</div></div></div></div></a>


<p>Dockefileには以下のように記述します。</p>



<pre class="wp-block-code"><code>From python:3.7
ENV PYTHONBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt ./
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /code</code></pre>



<p>例えば、</p>



<pre class="wp-block-code"><code>RUN mkdir /code</code></pre>



<p>というコードは、codeディレクトリをmkdirコマンドで作成しています。このようにRUNやADDなどのコマンドと、それに対応する命令を記述しています。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="fz-28px"><strong>3.requirements.txtの</strong></span><span class="fz-28px"><strong>作成</strong></span></p>
</div>



<p>次に、requirements.txtを記述していきます。requirements.txtは、pipを使って指定のパッケージを指定のバージョンでインストールできる設定ファイルです。先ほど作成したディレクトリに、Dockerfileと同様にrequirement.txtを作成して以下のように記述します。</p>



<pre class="wp-block-code"><code>Django
psycopg2</code></pre>



<p>これは、Djangoとpsycopg2をインストールするという意味です。psycopg2の後に改行しないように気をつけてください。また、これは注意点なのですが、このrequirement.txtやdockerfileを更新した場合には、以下のように実行しなければ反映されません。</p>



<pre class="wp-block-code"><code>$ docker-compose up --build -d</code></pre>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><span class="fz-28px"><strong>4.docker-compose.ymlの作成</strong></span></p>
</div>



<p>こちらも先ほどと同じく、作成したディレクトリにdocker-compose.ymlというファイルを作成して記述していきます。このファイルを作成することで、管理が非常に楽になります。内容は以下の通りです。8000ポートでアクセスできるようにしています。</p>



<pre class="wp-block-code"><code>
version: '3'

services:
  db:
    image: postgres
    volumes:
      - poll_db_data:/var/lib/postgresql/data:Z
    ports:
      - "5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=mypassword
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

volumes:
  poll_db_data:
    external: true
</code></pre>



<p>Dockerはコンテナを削除してしまうと、データベースの内容もすべて消えてしまうので、&#8221;poll_db_data&#8221;というvolumeを作成し、このようにZオプションをつけたり、external: trueを指定したりしています。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">5.プロジェクトの作成</span></strong></p>
</div>



<pre class="wp-block-code"><code>$ docker-compose run web django-admin.py startproject &#91;プロジェクト名] .</code></pre>



<p>このようなコマンドを実行することで、manage.pyの他プロジェクトディレクトリが作成されます。プロジェクト名は基本何でも良いです。また、docker-composeコマンドはdocker-compose.ymlが存在するディレクトリの中で実行してください。</p>



<p>次に、作成されたプロジェクトディレクトリの中のsettings.pyを開き、DATABASE=・・・のところを以下のように記述します。USERやPASSWORDは適当です。好きなものを使ってください。</p>



<pre class="wp-block-code"><code>DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'mypassword',
        'HOST': 'db',
        'PORT': 5432,
    }
}</code></pre>



<p>また、同じくsetting.pyのALLOWED_HOSTの部分を以下のように変更します。</p>



<pre class="wp-block-code"><code>ALLOWED_HOSTS = &#91;"*"]</code></pre>



<p>その後、以下のコマンドでDBのマイグレーションを行います。</p>



<pre class="wp-block-code"><code>$ docker-compose run web ./manage.py makemigrations
$ docker-compose run web ./manage.py migrate</code></pre>



<p>さらに、スーパーユーザーも作成してしまいます。以下のコマンドを実行すると、ユーザ名やメールアドレス、パスワード等の入力を求められると思うので、入力してください。Djangoの管理ページにアクセスするために必要です。</p>



<pre class="wp-block-code"><code>$ docker-compose run web ./manage.py createsuperuser</code></pre>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">6.コンテナの作成・起動</span></strong></p>
</div>



<pre class="wp-block-code"><code>$ docker-compose up -d</code></pre>



<p>このコマンドを実行してコンテナを作成・起動しましょう。-dオプションをつけることで、コンテナ起動後もコマンドを実行できます。</p>



<p>そして、次のコマンドでdefaultマシンに割り振られたipアドレスを取得します。僕の場合はdefaultマシンをそのまま使っていますが、別のマシンを使っている方はそのマシンについて調べてください。何もしていなければdefaultマシンを使っているはずです。</p>



<pre class="wp-block-code"><code>$ docker-machine ip default</code></pre>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">7.アクセス</span></strong></p>
</div>



<p>chrome等で、http://[<strong>6で調べたIPアドレス</strong>]:8000でアクセスしてみてください。(例：http://0.0.0.0:8000)この8000はdocker-compose.ymlで指定した値です。</p>



<p>以下のような画面になれば正しく環境構築ができています。正確には、右上のDjangoは3.0などになっているはずです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="802" height="616" src="https://ryuusan.com/wp-content/uploads/2020/04/Django_2.0_default_page.png" alt="" class="wp-image-248" srcset="https://ryuusan.com/wp-content/uploads/2020/04/Django_2.0_default_page.png 802w, https://ryuusan.com/wp-content/uploads/2020/04/Django_2.0_default_page-300x230.png 300w, https://ryuusan.com/wp-content/uploads/2020/04/Django_2.0_default_page-768x590.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></figure>



<h2 class="wp-block-heading"><span id="toc4">おわりに</span></h2>



<p>以上で環境構築編は終わりです。開発編に続きます。Pythonの勉強方法やDjangoの紹介、基本情報技術者試験の勉強方法なども分かりやすく書いているので、良ければ読んでみてください。</p>



<a href="https://ryuusan.com/python-study" title="Pythonの勉強方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/python-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/python-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/python-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/python-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの勉強方法</div><div class="blogcard-snippet internal-blogcard-snippet">最近人気沸騰中のプログラミング言語、Pythonの紹介から、Pythonの勉強方法まで詳細に説明していきます。初学者向けの記事ですが、初学者はもちろん、プログラミング経験者でPythonをまだ勉強していない方に対してもおすすめできる内容です。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.03.10</div></div></div></div></a>

<a href="https://ryuusan.com/django1" title="Django学習 ~Django紹介編~" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Django学習 ~Django紹介編~</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、DjangoやWebフレームワークについて分かりやすく紹介しています。DjangoとはPythonのWebフレームワークで、利用することで簡単にWebアプリを作成できます。また、この記事の後に環境構築編や開発編などが続きます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.04.06</div></div></div></div></a>

<a href="https://ryuusan.com/ipa-study" title="基本情報技術者試験に合格できた勉強方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/goukaku-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/goukaku-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/goukaku-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/goukaku-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">基本情報技術者試験に合格できた勉強方法</div><div class="blogcard-snippet internal-blogcard-snippet">基本情報技術者試験はエンジニアとしての基礎的な知識が問われる試験で、勉強すべき範囲が非常に広く、100時間程度の勉強が必要と言われています。その基本情報技術者試験をこれから受けようと思っている人に向けて、僕が勉強してきたことを紹介します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.03.02</div></div></div></div></a>


<p>開発編も公開しました！</p>



<a href="https://ryuusan.com/django3/" title="Djangoで簡単な「文字カウントメモ」を作ってみる" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Djangoで簡単な「文字カウントメモ」を作ってみる</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、「Djangoを勉強したい！」「Pythonで何か作ってみたい」という人に向けて、Djangoを用いた簡単なWebアプリ作成の方法を実際に一緒に作りながら紹介していきます。プログラミング学習の助けになれば幸いです。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.05.16</div></div></div></div></a>


<p>また、よろしければ僕のTwitter(<a href="https://twitter.com/ryu_programs">@ryu_programs</a>)のフォロー等もお願いします。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ryuusan.com/django2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Django学習 ~Django紹介編~</title>
		<link>https://ryuusan.com/django1/</link>
					<comments>https://ryuusan.com/django1/#respond</comments>
		
		<dc:creator><![CDATA[リューさん]]></dc:creator>
		<pubDate>Mon, 06 Apr 2020 06:10:41 +0000</pubDate>
				<category><![CDATA[プログラミング学習]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://ryuusan.com/?p=214</guid>

					<description><![CDATA[こんにちは、はじめまして。リューさん(@Ryu_programs)です。この記事ではPythonのWebアプリケーションフレームワークであるDjangoについて、以下のような人のために紹介していきます。 Pythonを学 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは、はじめまして。リューさん(<a href="https://twitter.com/Ryu_programs">@Ryu_programs</a>)です。この記事ではPythonのWebアプリケーションフレームワークである<strong>Django</strong>について、以下のような人のために紹介していきます。</p>


<div class="blank-box bb-tab bb-check bb-blue">
<ol>
<li>Pythonを学習しているけど、Pythonで何ができるのか分からない</li>
<li>Pythonを使って就活にも役立つ成果物を作ってみたい</li>
<li>プログラミングに興味あるけど、何から始めればいいのか分からない</li>
</ol>
</div>


<p>なお、この記事は「環境構築編」や「簡単なアプリケーション作成編」などに続いていく予定です。ぜひこの記事を読み、Djangoについて軽く理解しておいてください。</p>



<a href="https://ryuusan.com/django2/" title="Django学習　～環境構築編～" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Django学習　～環境構築編～</div><div class="blogcard-snippet internal-blogcard-snippet">この記事は紹介編の続きの記事であり、DockerでPythonのWebフレームワークであるDjangoの開発環境構築を分かりやすく説明しています。Djangoを学んでみたい方、Pythonで何か作ってみたいと思っている方は読んでみてください。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.04.07</div></div></div></div></a>

<a href="https://ryuusan.com/django3/" title="Djangoで簡単な「文字カウントメモ」を作ってみる" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Djangoで簡単な「文字カウントメモ」を作ってみる</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、「Djangoを勉強したい！」「Pythonで何か作ってみたい」という人に向けて、Djangoを用いた簡単なWebアプリ作成の方法を実際に一緒に作りながら紹介していきます。プログラミング学習の助けになれば幸いです。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.05.16</div></div></div></div></a>


<p>また、Pythonの勉強方法については以下の記事で紹介しています。Pythonは基本的なことに関しては覚えやすく、コードも書きやすいので、「プログラミングを学習したい！」と思っている人にはお勧めの言語です。</p>



<a href="https://ryuusan.com/python-study/" title="Pythonの勉強方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/python-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/python-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/python-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/python-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの勉強方法</div><div class="blogcard-snippet internal-blogcard-snippet">最近人気沸騰中のプログラミング言語、Pythonの紹介から、Pythonの勉強方法まで詳細に説明していきます。初学者向けの記事ですが、初学者はもちろん、プログラミング経験者でPythonをまだ勉強していない方に対してもおすすめできる内容です。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.03.10</div></div></div></div></a>



  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Webフレームワークとは</a></li><li><a href="#toc2" tabindex="0">Djangoの特徴</a></li><li><a href="#toc3" tabindex="0">おわりに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Webフレームワークとは</span></h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="386" src="https://ryuusan.com/wp-content/uploads/2020/04/Ruby_On_Rails.png" alt="ruby on rails logo" class="wp-image-227" srcset="https://ryuusan.com/wp-content/uploads/2020/04/Ruby_On_Rails.png 1024w, https://ryuusan.com/wp-content/uploads/2020/04/Ruby_On_Rails-300x113.png 300w, https://ryuusan.com/wp-content/uploads/2020/04/Ruby_On_Rails-768x290.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>先ほども書きましたが、DjangoとはPythonのWebフレームワークです。そもそもWebフレームワークとは、<span class="marker-under">便利な機能が用意されており、利用することでWebアプリケーションを簡単に短期間で作成できるようにする</span>といったものです。</p>



<p>WebフレームワークにはDjangoのほか、多くの種類があります。この記事ではその中でも有名でよく使われているWebフレームワークを簡単に紹介します。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">1.Laravel</span></strong></p>
</div>



<p>Laravelは<strong>PHP</strong>という言語のフレームワークです。そもそも、PHPという言語自体がWeb開発に多く使われていたこともあり、LaravelやPHPのもう一つのフレームワークであるCakePHPは非常に人気のWebフレームワークです。</p>



<p>ちなみに、PHPがWeb開発に多く使われると書きましたが、それはPHPが動的にWebページを生成できる、サーバサイドのスクリプト言語であるからです。PHPはWordPressなどにも使われていますね。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-24px"><span class="fz-28px">2.Ruby on rails</span></span></strong></p>
</div>



<p>Ruby on railsは<strong>Ruby</strong>という言語のフレームワークです。僕が大学1年生の夏に初めて学習した言語がRubyでした。プログラミングの基礎知識など全くなかった僕が、1ヵ月で<a href="https://paiza.jp/">Paiza</a>のスキルチェックでBランクを獲得できたのは、ひとえにRubyという言語の書きやすさであったり、分かりやすさのおかげだと思います。Ruby on railsもその特徴を受け継いでいます。</p>



<p>また、Rubyという言語は日本人のまつもとゆきひろさんが開発された言語であり、その影響なのか日本語の説明が多いことも特徴です。分からないことでもググったら大体日本語での解決法がヒットする、というのは安心できますよね。</p>



<h2 class="wp-block-heading"><span id="toc2">Djangoの特徴</span></h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="640" height="427" src="https://ryuusan.com/wp-content/uploads/2020/04/pc.jpg" alt="pcを操作(装飾)" class="wp-image-230" srcset="https://ryuusan.com/wp-content/uploads/2020/04/pc.jpg 640w, https://ryuusan.com/wp-content/uploads/2020/04/pc-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></figure>



<p>Djangoの特徴は以下の3点です。もちろんこれ以外の強みも多くあると思いますが、その中でも特に僕が便利だと感じた点を紹介しています。</p>


<div class="blank-box bb-tab bb-point bb-blue">
<ol>
<li><strong>データベースに強い</strong></li>
<li><strong>同じPythonのWebフレームワークであるFlaskよりも大規模開発に向いている</strong></li>
<li><strong>機械学習と組み合わせられる</strong></li>
</ol>
</div>


<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">1.データベースに強い</span></strong></p>
</div>



<p>まず、<span class="marker-under">1つめのデータベースに強い</span>というのは、Djangoは<strong>Oracle</strong>、<strong>SQLite</strong>、<strong>MySQL</strong>、<strong>PostgreSQL</strong>などのデータベースに対応しており、なおかつ簡単にデータベースを操作できるからです。</p>



<p>Djangoドキュメントの<a href="https://docs.djangoproject.com/ja/3.0/intro/tutorial01/">チュートリアル</a>のような簡単なWebアプリの場合、<span class="marker-under">ほとんどデータベースの知識は必要ありません。</span>(あった方が良いのはもちろんですが。）つまり、Pythonの知識さえ最低限あれば、簡単なWebアプリが作れてしまうということです。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">2.大規模開発に向いている</span></strong></p>
</div>



<p>Djangoはログイン機能やセキュリティ対策など必要な機能が全てそろっており、基本的には<span class="marker-under">Django単体でWebアプリを開発すること</span>ができます。このようなフレームワークをフルスタック・フレームワークと呼び、DjangoのほかRuby on railsなどもこのフルスタック・フレームワークです。</p>



<p>一方でFlaskなどはマイクロフレームワークと呼ばれており、必要最低限の機能しか備えていません。そのため、足りない機能は拡張などで補うことになります。ただ、このようなマイクロフレームワークは小規模の開発をする際や初心者には、機能が少ないため分かりやすいというメリットもあります。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">3.機械学習と組み合わせられる</span></strong></p>
</div>



<p>DjangoでWebアプリケーションを開発する際にはPythonという言語を使いますが、そのPythonは機械学習に強い言語です。また、Webクローリング等もPythonを使うことで簡単に行うことができます。</p>



<p>そのため、<span class="marker-under">機械学習やWebクローリングで得られたデータをDjangoを使って表示するWebアプリケーションを、Pythonという言語だけで実装することができる</span>のはDjangoの強みです。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-28px">Djangoを利用しているサービス</span></strong></p>
</div>



<p>例えば、<span class="marker-under">InstagramやMozillaなど</span>がDjangoを利用して開発された有名なサービスです。1度は使ったことがある人も多いのではないでしょうか。Pythonを使って、あのような素晴らしいサービスを作成することができます。</p>



<h2 class="wp-block-heading"><span id="toc3">おわりに</span></h2>



<p>この記事ではDjangoやWebフレームワークの紹介をしました。参考になれば幸いです。また、もしよろしければTwitter(<a href="https://twitter.com/ryu_programs">@ryu_programs</a>)のフォロー等もお願いします。この記事の次は<span class="marker">Dockerを利用したDjango開発環境構築</span>の記事です。</p>



<p>公開しましたので、読んでみてください。</p>



<a href="https://ryuusan.com/django2/" title="Django学習　～環境構築編～" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Django学習　～環境構築編～</div><div class="blogcard-snippet internal-blogcard-snippet">この記事は紹介編の続きの記事であり、DockerでPythonのWebフレームワークであるDjangoの開発環境構築を分かりやすく説明しています。Djangoを学んでみたい方、Pythonで何か作ってみたいと思っている方は読んでみてください。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.04.07</div></div></div></div></a>

<a href="https://ryuusan.com/django3/" title="Djangoで簡単な「文字カウントメモ」を作ってみる" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/Django-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/Django-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/Django-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Djangoで簡単な「文字カウントメモ」を作ってみる</div><div class="blogcard-snippet internal-blogcard-snippet">この記事では、「Djangoを勉強したい！」「Pythonで何か作ってみたい」という人に向けて、Djangoを用いた簡単なWebアプリ作成の方法を実際に一緒に作りながら紹介していきます。プログラミング学習の助けになれば幸いです。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.05.16</div></div></div></div></a>


<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://ryuusan.com/django1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pythonの勉強方法</title>
		<link>https://ryuusan.com/python-study/</link>
					<comments>https://ryuusan.com/python-study/#respond</comments>
		
		<dc:creator><![CDATA[リューさん]]></dc:creator>
		<pubDate>Tue, 10 Mar 2020 07:11:17 +0000</pubDate>
				<category><![CDATA[プログラミング学習]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://ryuusan.com/?p=158</guid>

					<description><![CDATA[こんにちは、はじめまして。リューさんです。Pythonの勉強方法を大まかな流れで表すと、次のようになります。 Python初学者向けの技術書を読み、模写コーディングしてみる Paizaなどでスキルチェックする 実際にシス [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは、はじめまして。リューさんです。Pythonの勉強方法を大まかな流れで表すと、次のようになります。</p>


<div class="blank-box bb-tab bb-good bb-blue">
<ol>
<li>Python初学者向けの技術書を読み、模写コーディングしてみる</li>
<li>Paizaなどでスキルチェックする</li>
<li>実際にシステムなどを開発 or 機械学習やクローリングの道へ</li>
</ol>
</div>


<p>この記事では、「そもそもPythonって？」という話から勉強方法の詳細まで、僕(<a href="https://twitter.com/Ryu_programs">@Ryu_programs</a>)の経験談を踏まえ、他サイトよりも詳しく、分かりやすくご紹介していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Pythonとは？</a></li><li><a href="#toc2" tabindex="0">Pythonの勉強方法</a></li><li><a href="#toc3" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Pythonとは？</span></h2>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="640" height="427" src="https://ryuusan.com/wp-content/uploads/2020/03/question.jpg" alt="" class="wp-image-181" srcset="https://ryuusan.com/wp-content/uploads/2020/03/question.jpg 640w, https://ryuusan.com/wp-content/uploads/2020/03/question-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></figure></div>



<p>Pythonは、最近人気のプログラミング言語の１つで、基本情報処理試験にもCOBOLのかわりに導入されるなど、需要が高まっています。下の記事は僕が一発で基本情報技術者試験に合格した時の<span class="marker-under">再現性の高い</span>勉強方法です。これから受験される方は参考にしてみてください。</p>



<a href="https://ryuusan.com/ipa-study/" title="基本情報技術者試験に合格できた勉強方法" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://ryuusan.com/wp-content/uploads/2020/03/goukaku-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://ryuusan.com/wp-content/uploads/2020/03/goukaku-160x90.jpg 160w, https://ryuusan.com/wp-content/uploads/2020/03/goukaku-120x68.jpg 120w, https://ryuusan.com/wp-content/uploads/2020/03/goukaku-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">基本情報技術者試験に合格できた勉強方法</div><div class="blogcard-snippet internal-blogcard-snippet">基本情報技術者試験はエンジニアとしての基礎的な知識が問われる試験で、勉強すべき範囲が非常に広く、100時間程度の勉強が必要と言われています。その基本情報技術者試験をこれから受けようと思っている人に向けて、僕が勉強してきたことを紹介します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ryuusan.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">ryuusan.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.03.02</div></div></div></div></a>


<p>また、この表は、<a href="https://trends.google.co.jp/trends/explore?q=Python&amp;geo=JP">Google トレンド</a>で検索したもので、日本におけるPythonというキーワードのweb上での人気度を示しています。この表から、<span class="marker">Pythonというキーワードが一年を通して非常に人気である</span>ことが分かります。</p>


<blockquote>
<p>数値は、特定の地域と期間について、グラフ上の最高値を基準として検索インタレストを相対的に表したものです。100 の場合はそのキーワードの人気度が最も高いことを示し、50 の場合は人気度が半分であることを示します。</p>
<p>引用: <a href="https://trends.google.co.jp/trends/?geo=JP">https://trends.google.co.jp/trends/?geo=JP</a></p>
</blockquote>


<script type="text/javascript" src="https://ssl.gstatic.com/trends_nrtr/2152_RC02/embed_loader.js"></script> <script type="text/javascript"> trends.embed.renderExploreWidget("TIMESERIES", {"comparisonItem":[{"keyword":"Python","geo":"JP","time":"today 12-m"}],"category":0,"property":""}, {"exploreQuery":"q=Python&geo=JP&date=today 12-m","guestPath":"https://trends.google.co.jp:443/trends/embed/"}); </script>



<p>Pythonは複雑な処理でもC言語などに比べると簡単に記述することができ、覚えやすいことからプログラミング初学者にも、経験者にもおすすめの言語です。この記事を参考にして、ぜひ学習してみてはどうでしょうか。</p>



<p>実際に、後で紹介するPaizaというサイトのスキルチェックで僕がAランクを取得する時に用いた言語もPythonです。</p>



<p>機械学習をする際にも非常によく使われる言語なので、機械学習をしてみたい方はぜひこの記事を参考に勉強してみてください。</p>



<h2 class="wp-block-heading"><span id="toc2">Pythonの勉強方法</span></h2>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="640" height="458" src="https://ryuusan.com/wp-content/uploads/2020/03/notepc.jpg" alt="" class="wp-image-180" srcset="https://ryuusan.com/wp-content/uploads/2020/03/notepc.jpg 640w, https://ryuusan.com/wp-content/uploads/2020/03/notepc-300x215.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></figure></div>



<p>Pythonの勉強方法は、最初に述べた通り<span class="marker-under">3ステップ</span>に分けられます。ここでは、1ステップずつ説明していきます。すでにPythonの基礎知識を知っている、という方はステップ2かステップ3から読んでみてください。参考になると思います。</p>


<div class="blank-box bb-tab bb-point bb-blue">
<ol class="rich-text editor-rich-text__editable block-editor-rich-text__editable is-selected" role="textbox" contenteditable="true" aria-multiline="true" aria-label="リストを入力...">
<li>Python初学者向けの技術書を読み、模写コーディングしてみる</li>
<li>Paizaなどでスキルチェックする</li>
<li>実際にシステムなどを開発 or 機械学習やクローリングの道へ</li>
</ol>
</div>


<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p class="has-normal-font-size"><strong><span class="fz-22px">ステップ</span></strong><span class="fz-22px"><strong>1</strong></span></p>
</div>



<p>Python初学者向けの技術書を一冊買いましょう。Pythonの技術書と言えば『オライリー』が非常に有名です。ただ、<span class="marker-under-red">少し難しい</span>かもしれないのでここでは僕のおすすめ本の紹介程度に留めておきます。ステップ3で買うことをお勧めします。</p>



<p>まず、この『入門Python　3』は初心者から中級者、上級者を目指す際に非常に参考になる本です。ただ、入門用にするにはすこし難易度が高いかもしれません。お値段も4000円と高いので、ある程度Pythonの特徴、書き方などを理解したうえで購入しましょう。</p>



<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;"><tr style="border-style:none;"><td style="vertical-align:top; border-style:none; padding:10px; width:108px;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F13495089%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F17703142%252F"><img decoding="async" border="0" alt="" src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7386/9784873117386.jpg?_ex=128x128" /></a></td><td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;"><p style="padding:0; margin:0;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F13495089%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F17703142%252F">入門Python　3 [ ビル・ルバノビック ]</a></p><p style="color:#666; margin-top:5px line-height:1.5;">価格:<span style="font-size:14px; color:#C00; font-weight:bold;">4,070円</span><br/><span style="font-size:10px; font-weight:normal;">(2020/3/10 13:19時点)</span></p></td></tr></table>
<img loading="lazy" decoding="async" border="0" width="1" height="1" src="https://www10.a8.net/0.gif?a8mat=3B98Y5+C6720I+2HOM+BWGDT" alt="">



<p>こちらは少し毛色が違う技術書で、例えば Pythonで エクセルの自動化などを行って 、 日々の仕事の中の無駄なことを無くしたい！と思っている人におすすめの本です。ただ、こちらも入門書を買ってから購入することをお勧めします。</p>



<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;"><tr style="border-style:none;"><td style="vertical-align:top; border-style:none; padding:10px; width:108px;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14994167%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18615836%252F"><img decoding="async" border="0" alt="" src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7782/9784873117782.jpg?_ex=128x128" /></a></td><td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;"><p style="padding:0; margin:0;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14994167%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18615836%252F">退屈なことはPythonにやらせよう ノンプログラマーにもできる自動化処理プログラミング [ Al Sweigart ]</a></p><p style="color:#666; margin-top:5px line-height:1.5;">価格:<span style="font-size:14px; color:#C00; font-weight:bold;">4,070円</span><br/><span style="font-size:10px; font-weight:normal;">(2020/3/10 13:23時点)</span></p></td></tr></table>
<img loading="lazy" decoding="async" border="0" width="1" height="1" src="https://www11.a8.net/0.gif?a8mat=3B98Y5+C6720I+2HOM+BWGDT" alt="">



<p>本の紹介でついつい長くなってしまったのですが、最後に<span class="marker">僕がお勧めするPythonの入門書、『みんパイ』</span>を紹介します。実際に僕もこの本でPythonを勉強しました。</p>



<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;"><tr style="border-style:none;"><td style="vertical-align:top; border-style:none; padding:10px; width:108px;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14583659%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18289082%252F"><img decoding="async" border="0" alt="" src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/9463/9784797389463.jpg?_ex=128x128" /></a></td><td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;"><p style="padding:0; margin:0;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14583659%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18289082%252F">みんなのPython 第4版 [ 柴田 淳 ]</a></p><p style="color:#666; margin-top:5px line-height:1.5;">価格:<span style="font-size:14px; color:#C00; font-weight:bold;">2,970円</span><br/><span style="font-size:10px; font-weight:normal;">(2020/3/10 13:42時点)</span></p></td></tr></table>
<img loading="lazy" decoding="async" border="0" width="1" height="1" src="https://www11.a8.net/0.gif?a8mat=3B98Y5+C6720I+2HOM+BWGDT" alt="">



<p>この本は、<span class="marker-under">入門書として必要な基本事項をしっかりと網羅しており、さらに機械学習やデータ処理などにも軽く触れられている</span>ので、次に学ぶべきこと、学びたいことを決めるきっかけになるはずです。また、分からないことがあったときの辞書的な使い方もできるので、この本を一通り学習した後もずっと使えるはずです。</p>



<p>この本を購入したら、まず書いてある通りに開発環境を整えましょう。この本は、Anacondaという、本家Pythonのいわゆる特化バージョンをインストールする必要はあるものの、Jupyter Notebookと呼ばれる、Webブラウザ上で動作する機能を用いて実装・実行するので、<span class="marker-under">そこまで難しくありません。</span></p>



<p>もちろん、将来的にはPython IDEであるPycharmを使うことになったり、多くの仮想環境を用意してプロジェクトごとに管理したり、と難しい環境構築にチャレンジすることになるとは思いますが、最初はPythonに慣れるため、環境構築に慣れるためにJupyter Notebookを使うことをおすすめします。</p>



<p>僕の体験談なのですが、プログラミング初心者だった時にRuby on railsの環境構築でつまずき、挫折した経験があり、<span class="marker-under">環境構築は割と高い壁</span>だと思っています。経験を積めばググることで理解することができるのですが、最初はググっても理解できないことが多いので簡単な環境構築から始めることをお勧めします。</p>



<p>簡単なコードであれば<a href="https://paiza.io/ja">Paiza IO</a>で試してみるのもありですね。</p>



<p>環境構築を終えたら、<span class="marker-under">内容を読み、本に書いてあることに従って模写していくだけ</span>です。自分の書いたプログラムが思い通りに動作した時は快感ですよ。この本は基本事項が網羅されているので、これだけでステップ2に進むだけの力がつくと思います。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-22px"> ステップ2 </span></strong></p>
</div>



<p>ステップ1で力がついた、Pythonの基礎知識は既に身についている、という人は<span class="marker-under"><a href="https://paiza.jp/">Paiza</a>に登録してスキルチェックをDランクから淡々とこなしましょう。</span>問題を解いているうちに、どんどん力がついてくるはずです。そうなったらステップ3に進みましょう。</p>



<p>Dランクの問題を全部解く必要はありません。また、最初解くことができなくても落ち込む必要はありません。不安な人や、上のランクにチャレンジしようと思っている人は、レベルアップ問題集も準備されているので、それらをガンガン解いて自信をつけてから挑みましょう。</p>



<p>この処理を実装するために何が必要なのか、どのようにコードを書けばよいのか、直感的に分かるようになってきたらランキングの上位に入ることも出来るはずです。</p>



<p>また、上のランクに上がると<span class="marker-under">Paiza経由で企業からスカウトが来ることもあります。</span>就職や転職等にも役立つはずなので、是非チャレンジしてみてください。</p>



<p>僕もそろそろスキルチェックのSランクに挑戦するつもりなので、一緒に頑張りましょう。もし、分からないことやつまずいたことなどあれば、<a href="https://twitter.com/Ryu_programs">僕のTwitter</a>に連絡してください。出来る限りサポートします。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box sticky st-blue block-box">
<p><strong><span class="fz-22px">ステップ3</span></strong></p>
</div>



<p>Paizaのスキルチェックで力をつけたら、いよいよステップ3です。なにか開発してみたいものがあれば、関連の技術書を探し、参考にしながら実装してみると良いでしょう。例えば、Webアプリケーションを作成してみたい場合は、フレームワークであるDjangoをお勧めします。</p>



<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;"><tr style="border-style:none;"><td style="vertical-align:top; border-style:none; padding:10px; width:108px;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00rk0p4.2bo11af8.g00rk0p4.2bo12494%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbookfan%252Fbk-4798054488%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbookfan%252Fi%252F11995866%252F"><img decoding="async" border="0" alt="" src="http://thumbnail.image.rakuten.co.jp/@0_mall/bookfan/cabinet/00812/bk4798054488.jpg?_ex=128x128" /></a></td><td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;"><p style="padding:0; margin:0;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00rk0p4.2bo11af8.g00rk0p4.2bo12494%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbookfan%252Fbk-4798054488%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbookfan%252Fi%252F11995866%252F">Python　Django超入門／掌田津耶乃【1000円以上送料無料】</a></p><p style="color:#666; margin-top:5px line-height:1.5;">価格:<span style="font-size:14px; color:#C00; font-weight:bold;">3,300円</span><br/><span style="font-size:10px; font-weight:normal;">(2020/3/10 14:59時点)</span></p></td></tr></table>
<img loading="lazy" decoding="async" border="0" width="1" height="1" src="https://www15.a8.net/0.gif?a8mat=3B98Y5+C6720I+2HOM+BWGDT" alt="">



<p>世界的に幅広く普及している<span class="marker-under">インスタも、Djangoを用いて作成されたサービス</span>です。自分でインスタのようなアプリケーションを作ってみる、というのも面白そうですね。ググると、参考になるサイトも多くあるので、調べてみてください。需要があれば、このサイトでも記事を書くかもしれません。</p>



<p>ちなみに、僕はWebクローリング技術を学びました。Webクローリングが学びたい人は以下の本がお勧めです。</p>



<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;"><tr style="border-style:none;"><td style="vertical-align:top; border-style:none; padding:10px; width:108px;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F15960670%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F19670568%252F"><img decoding="async" border="0" alt="" src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7383/9784297107383.jpg?_ex=128x128" /></a></td><td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;"><p style="padding:0; margin:0;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F15960670%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F19670568%252F">Pythonクローリング＆スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイドー [ 加藤 耕太 ]</a></p><p style="color:#666; margin-top:5px line-height:1.5;">価格:<span style="font-size:14px; color:#C00; font-weight:bold;">3,608円</span><br/><span style="font-size:10px; font-weight:normal;">(2020/3/10 15:03時点)</span></p></td></tr></table>
<img loading="lazy" decoding="async" border="0" width="1" height="1" src="https://www10.a8.net/0.gif?a8mat=3B98Y5+C6720I+2HOM+BWGDT" alt="">



<p>Webクローリングは、ホームページ上の情報を収集・加工する技術で、例えば食べログのレストラン名と星の数をデータベースに保存したり、自然言語処理技術も活用することで、Wikipedia上の名詞の数をカウントしたり、といったことが可能です。他にも、好きな女優さんや俳優さんの写真を自動収集するクローラーも作ることができます。</p>



<p>機械学習を行ってみたい場合も同様に、関連する技術書を購入して勉強してみてください。オライリー本を紹介しておきます。</p>



<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;"><tr style="border-style:none;"><td style="vertical-align:top; border-style:none; padding:10px; width:108px;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14919364%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18584469%252F"><img decoding="async" border="0" alt="" src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7980/9784873117980.jpg?_ex=128x128" /></a></td><td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;"><p style="padding:0; margin:0;"><a rel="nofollow" href="https://rpx.a8.net/svt/ejp?a8mat=3B98Y5+C6720I+2HOM+BWGDT&#038;rakuten=y&#038;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20030468772_3B98Y5_C6720I_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14919364%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18584469%252F">Pythonではじめる機械学習 scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎 [ Andreas C. Muller ]</a></p><p style="color:#666; margin-top:5px line-height:1.5;">価格:<span style="font-size:14px; color:#C00; font-weight:bold;">3,740円</span><br/><span style="font-size:10px; font-weight:normal;">(2020/3/10 15:11時点)</span></p></td></tr></table>
<img loading="lazy" decoding="async" border="0" width="1" height="1" src="https://www16.a8.net/0.gif?a8mat=3B98Y5+C6720I+2HOM+BWGDT" alt="">



<h2 class="wp-block-heading"><span id="toc3">まとめ</span></h2>



<p>もし、質問やPythonについて分からないことなどありましたら、僕のTwitter<a href="https://twitter.com/Ryu_programs">@Ryu_programs</a>まで連絡をください。Twitterでも日々の気づきや情報などを発信していくので、良ければフォロー等もお願いします。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ryuusan.com/python-study/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
