talosのプログラミング教室

Anaconda+Django+VSCodeでストレスレスな環境構築②

こんにちは。talosです。

今回はAnacondaでDjangoをインストールし、VSCodeでコーディングできるように環境構築していきたいと思います。

②ではVSCodeDjangoアプリのデバッグをできるようにします。

Djangoのインストールがまだの方は①から読んでください。

talosta.hatenablog.com

拡張機能のインストール

VSCodeDjangoアプリのデバッグをできるようにします。

VSCodeを開いたら拡張機能ボタンを押下してください。

f:id:talosta:20201114224507p:plain

次に以下のワードをそれぞれ検索窓に打ち込み、インストールしてください。

  • Python
  • Anaconda Extension Pack

f:id:talosta:20201114224832p:plain

AnacondaのPathを通す

AnacondaをインストールしたときにPathを通していない人は、ユーザー環境変数のPathに以下を追加してください。
(ユーザー名のところはご自身のユーザー名に置き換えてください)

  • C:\Users\ユーザー名\Anaconda3
  • C:\Users\ユーザー名\Anaconda3\Scripts
  • C:\Users\ユーザー名\Anaconda3\Library\bin

VSCodeのターミナルで仮想環境に入る

まずVSCodeを再起動してください。

立ち上がったらCtrl+Shift+Pでコマンドパレットを開き、「Python: インタープリターを選択」と入力して選択します。

すると、以下のような選択肢が出てくるので先程作成した仮想環境を選択します。

f:id:talosta:20201114225317p:plain

そうしたら、Ctrl+Shift+@でターミナルを開きます。

うまくいけば仮想環境が開くはずです。

仮想環境が開かなかった場合は再起動したり、再びインタープリターを選択してみたりしてください。


スポンサーリンク



デバッグ用のアプリを作る

Djangoの公式チュートリアルを基にデバッグをするための最低限のアプリを作ります。

仮想環境に入ったら、前回作ったプロジェクト(mysite)のディレクトリに移動します。

mysiteに入ったら以下のコマンドを実行します。

python manage.py startapp polls  

これでPollsアプリケーションが作られました。

まず、mysiteディレクトリ内のmysiteのurls.py(mysite/mysite/urls.py)を編集します。

mysite/urls.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

次にpollsディレクトリに移動し、views.pyを編集します。

polls/views.py

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

pollsにもurls.pyを作成します。

polls/urls.py

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

デバッグをしてみる

ファイル⇒フォルダーを開くからmysiteを選択してください。

f:id:talosta:20201115131611p:plain

次に虫のマークを押下し、「launch.jsonファイルを作成します」をクリックします。

f:id:talosta:20201115131830p:plain

Pythonを選択します。

f:id:talosta:20201115135129p:plain

Djangoを選択します。

f:id:talosta:20201115135139p:plain

次にブレークポイントを設置します。

が、その前に、今回はデバッグしているところをわかりやすくするためにコードを追加します。

polls/views.py

from django.http import HttpResponse


def index(request):
    print(1)
    print(2)
    print(3)
    return HttpResponse("Hello, world. You're at the polls index.")

そうしたら、5行目の左側にカーソルを合わせると赤い丸が出るので、クリックします。

カーソルを外しても赤い丸が出たままになっていればOKです。

f:id:talosta:20201115132750p:plain

あとは実行ボタンを押下するとサーバーが立ち上がるので、http://localhost:8000/pollsにアクセスします。

f:id:talosta:20201115133041p:plain

ステップオーバーボタンを押すと、コンソールに1と出力されたと思います。

f:id:talosta:20201115133424p:plain

さらにもう1回押すと2が出力され、もう1回押すと3が出力されます。

おわりに

今回はDjangoアプリをVSCodeデバッグするための環境を作りました。

Anaconda+Django+VSCodeでストレスレスな環境構築①

こんにちは。talosです。

今回はAnacondaでDjangoをインストールし、VSCodeでコーディングできるように環境構築していきたいと思います。

①ではDjangoの準備を行います。

Djangoをインストール済みの方は②から読んでください。

talosta.hatenablog.com

前提条件

OS:Windows

Anacondaインストール済み

VSCodeインストール済み

VSCodeのインストール方法は以下のページで説明しています。(日本語化までで大丈夫です)
talosta.hatenablog.com

仮想環境を作成

すでに仮想環境がある人は読み飛ばしてください。

Anaconda Promptを開き、以下のコマンドを実行します。

conda create -n django python=3.7     

「-n」の後は仮想環境の名前ですが、任意の名前をつけてください。

また、pythonのバージョンは3.7ならどのDjangoのバージョンでも動くので今回はこれを使います。

別のバージョンを使いたいという方は以下のページを参考にしてください。

https://docs.djangoproject.com/ja/3.1/faq/install/

Djangoをインストール

先程作った仮想環境に入りましょう。

conda activate django

仮想環境に入ったら以下のコマンドを実行してDjangoをインストールします。

conda install -c conda-forge django


スポンサーリンク



Djangoの動作確認

VSCodeの設定の前にDjangoの動作確認をしておきましょう。

以下のコマンドでプロジェクトを作成します。

django-admin startproject mysite

プロジェクトを作成したら、

cd mysite

でプロジェクトのディレクトリに移動し、サーバを起動させます。

 python manage.py runserver

以下のようなメッセージが出てきたらブラウザでhttp://127.0.0.1:8000/にアクセスしてみてください。

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
November 15, 2020 - 11:37:20
Django version 3.1.3, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

このページが出てきたら成功です。

f:id:talosta:20201114223235p:plain

おわりに

今回はDjangoをインストールして動作確認まで行いました。

②に続きます。

talosta.hatenablog.com

令和2年度10月の情報処理技術者試験は返金されないってマジ?

こんにちは。talosです。

いまTwitterではこのような噂が流れています。

『次回の情報処理技術者試験は中止になっても返金されない』

マジ?

いやいやいや、まさかそんなわけ、、、

とりあえず情報処理技術者試験のページを見てみることにしました。

そこにはこのような一文が、、、

『受理した受験手数料は、理由のいかんにかかわらず返還できません』
がーん

これはつらいですね、、、

でも待ってください。

この一文、結構前から書いてありました。

それを読んでいなかった一部の人が勝手に騒いでいるのでは?

と思い、よくよく読んでみるとこのようなことが書いてありました。

 (1)~(3)をご承知おきの上、受験申込みいただきますようお願いいたします。
 受理した受験手数料は、理由のいかんにかかわらず返還できませんので、ご注意ください。なお、(1) のように経済産業省及び当機構の判断で試験実施を中止した場合などには、代替措置等を講じる場合もあります。
 また、新型コロナウイルス感染症拡大防止の観点から、早期の受験を迫られていない方につきましては、なるべく今回の受験申込みを自粛していただきますよう、ご協力をお願いします。

(1) 試験の中止について
新型コロナウイルス感染症の感染状況によっては、受験申込みを受け付けた後でも、試験を中止する場合があります。


IPA 独立行政法人 情報処理推進機構:情報処理技術者試験:代替試験、秋期試験、一部免除延長について

スポンサーリンク




Q.「受理した受験手数料は、理由のいかんにかかわらず返還できません」とのことですが、試験実施が中止になった場合はどうなるのでしょうか。
A.地震、台風などのやむを得ない事情や、新型コロナウイルス感染症の感染状況によっては、受験申込みを受け付けた後でも、経済産業省及びIPAの判断で試験実施を中止することがあります。その場合、代替措置等を講じる場合もあります。
この「代替措置等」は、状況により、別日程での試験実施(振替)または受験手数料の返還の措置を行います。


IPA 独立行政法人 情報処理推進機構:情報処理技術者試験・情報処理安全確保支援士試験

一見するとどっちつかずに聞こえますが、私はこういうことだと思います。

『中止の場合は返金するけど、あなたが新型コロナにかかって試験受けられなくても返金しないよ』

もちろん『代替措置等を講じる場合もあります。』とあるので返金されない可能性も無きにしも非ずですが、今までの対応を見るとその可能性は低いでしょう。

ということで、そこらへんは心配ないと思います。

あとは自分は絶対新型コロナにかからないという自信がある人だけ申し込みましょう。


JavaServer FacesでWebアプリ開発 ~基本編~

今回はJSFを使って簡単なWebアプリを作ります。

環境構築がまだの方はこちらの記事から読んでみてください。

talosta.hatenablog.com

テーブルの作成

まず、MySQLコマンドラインを開きます。

f:id:talosta:20200608213041p:plain

開いたら前回設定したパスワードを入力します。

f:id:talosta:20200608213231p:plain

プロンプトが表示されたら

create database sample;
use sample;
create table user (id integer primary key, name varchar(30) not null);
insert into user values (1, "Ito");
insert into user values (2, "Sato");
insert into user values (3, "Muto");
select * from user;

と打ち込んでください。

f:id:talosta:20200608214908p:plain

このような出力があるはずです。

今回はSQLの意味については触れません。

IDと名前のカラムを持つテーブルを作ったことだけは覚えておいてください。

プロジェクトの作成

Eclipseを開き、ファイル→新規→動的Webプロジェクトを選択してください。

今回のプロジェクト名は「JsfSample」とします。

次にターゲット・ランタイムをWildFly 11.0にします。

f:id:talosta:20200608215732p:plain

最後に構成の欄の変更ボタンを押し、JavaServer Facesにチェックを付けます。

f:id:talosta:20200608215915p:plain

OKと完了を押します。

JDBCドライバを入れる

C:\Program Files(x86)\MySQL\Connector J 8.0にあるmysql-connector-java-8.0.20.jarをWebContent/WEB-INF/libに入れます。

f:id:talosta:20200608221925p:plain
f:id:talosta:20200608221942p:plain


スポンサーリンク



JavaBeansを作成

まず、Javaリソースのsrc上で右クリックし、新規→クラスと進みます。

f:id:talosta:20200609215257p:plain

パッケージ名を「javabeans」、クラス名を「User」とし、インターフェースに「java.io.Serializable」を持ちます。

f:id:talosta:20200609223137p:plain

package javabeans;

import java.io.Serializable;

public class User implements Serializable {

	private int id;
	private String name;

	public User() {
	}

	public User(int id, String name) {
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

DAOを作成

DAOはData Access Objectの略です。

基本的にはデータベース操作を行うクラスを指します。

JavaBeansと同様にクラスを作成します。

パッケージ名を「dao」、クラス名を「UserDao」とします。

package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javabeans.User;


public class UserDao {

	private final String URL ="jdbc:mysql://localhost:3306/sample?serverTimezone=JST";
	private final String USER = "root";
	private final String PASSWORD = "root";

	// 全件取得
	public ArrayList<User> getAllUsers() {

		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		ArrayList<User> users = new ArrayList<>();

		try {
			con = DriverManager.getConnection(URL, USER, PASSWORD);
			String sql = "select * from user";
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();

			while (rs.next()) {
				User user = new User();
				user.setId(rs.getInt("id"));
				user.setName(rs.getString("name"));
				users.add(user);
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (ps != null) {
					ps.close();
				}
				if (con != null) {
					con.close();
				}
			}
			catch (SQLException se) {
				se.printStackTrace();
			}
		}

		return users;
	}
}

バッキングビーンを作成

バッキングビーンとはJSFで作られたページとやりとりをできるJavaプログラムです。

アノテーションを付けることでJSFページとやりとりができます。

アノテーションについては後ほど説明します。

また、バッキングビーンはJavaBeansと同じくカプセル化されています。

それでは作ってみましょう。

パッケージ名は「backingbeans」、クラス名は「UsersBean」とします。

package backingbeans;

import java.io.Serializable;
import java.util.ArrayList;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

import dao.UserDao;
import javabeans.User;

@Named
@RequestScoped
public class UsersBean implements Serializable {

	private ArrayList<User> users;
	
	public UsersBean() {
		UserDao userDao = new UserDao();
		users = userDao.getAllUsers();
	}

	public ArrayList<User> getUsers() {
		return users;
	}

	public void setUsers(ArrayList<User> users) {
		this.users = users;
	}

}

@Namedと@RequestScopedがアノテーションと呼ばれるものです。

@Namedはクラスに任意の名前を付けるものですが、指定しなければクラス名の1文字目を小文字にした名前が付けられます。

UserBeanクラスの場合はuserBeanとなります。

これがないとJSFページからアクセスできないので必ず付ける必要があります。

また、バッキングビーンはnewすることができません。

その代わり、オブジェクトの生成と廃棄をJavaEEシステムが自動で行ってくれます。

そのタイミングを指定しているのが@RequestScopedです。

@RequestScopedはリクエストが発生した時にオブジェクトが自動生成され、レスポンスが完了すると破棄されます。

他にも@SessionScopedや@ApplicationScopedなどがあり、@SessionScopedはユーザーがログインしてからログアウトするまでの過程に相当し、@ApplicationScopedはアプリケーションが起動してから停止するまでの過程に相当します。

xhtmlファイルの作成

WebContentフォルダ上で右クリックし、新規→XHTMLページへと進みます。

f:id:talosta:20200608220405p:plain

ファイル名は「index.xhtml」とします。

f:id:talosta:20200608220432p:plain

次へを押し、Blank JSF Pageを選択して完了を押します。

f:id:talosta:20200608220447p:plain

できたらこのように書いてみましょう。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">

<h:head>
	<title>ユーザー一覧</title>
</h:head>
<body>
	<h1>ユーザー一覧</h1>
	<h:dataTable value="#{usersBean.users}" var="user" border="1">
		<h:column>
			<f:facet name="header">ID</f:facet>
			#{user.id}
		</h:column>
		<h:column>
			<f:facet name="header">名前</f:facet>
			#{user.name}
		</h:column>
	</h:dataTable>
</body>
</html>

#{usersBean.users}はEL式と呼ばれます。

これはUserBeanクラスをのusersフィールドを表しています。

また、dataTableタグは拡張for文のように使い、表を作ることができます。

userという変数はusersリストの各行を表し、繰返し出力します。

実行する

index.xhtml上で右クリックし、実行→サーバーで実行を選択します。

ウィンドウが開いたら完了を押します。

すると以下のようなページが開くはずです。

f:id:talosta:20200613171946p:plain

なお、コードを変更したときは一度サーバーを停止してから実行してください。

f:id:talosta:20200613172203p:plain

おわりに

今回はJSFで簡単なWebアプリケーションを作りました。

次はもう少し難しいものを作ってみます。

JavaServer FacesでWebアプリ開発 ~環境構築編~

f:id:talosta:20200505143241p:plain


最近、JSF(JavaServer Faces)をやっているのですが、参考になるWebサイトが少ないので書いていこうと思います。

今回は環境構築をしていきます。

Eclipseの環境構築

こちらを参考に構築してください。

talosta.hatenablog.com


MySQLインストールの準備

https://support.microsoft.com/ja-jp/help/2977003/the-latest-supported-visual-c-downloads

上記ページからMicrosoft Visual C++ 2019 Redistributable Packageをダウンロードします。

Microsoft Visual C++ 2019 Redistributable Packageのダウンロード

ダウンロードしたら実行してインストールしてください。

MySQLのインストール

https://dev.mysql.com/downloads/windows/installer/8.0.html

上記ページからインストーラをダウンロードします。

MySQLインストーラのダウンロード

ダウンロードできたら実行しましょう。

最初にこのウィンドウが出るのでデフォルトのままNextを押します。

MySQLのインストール1

次にこのウィンドウが出るのでNextを押します。

MySQLのインストール2

ダイアログが出るのでYesを押します。

MySQLのインストール3

このウィンドウが出るのでExecuteを押します。

MySQLのインストール4

以降初期設定が始まりますが、基本的にはデフォルトで大丈夫なのでNextを押し続けます。

ここまできたらパスワードを設定します。

MySQLの初期設定1

パスワードを打ち込んだらまたNextを押し続けます。

MySQLの初期設定2

このウィンドウに到達したらExecuteを押しましょう。

終わったらFinishを押し、その後Nextを押し続けます。

このウィンドウが出たら、先程設定したパスワードを入力し、Check→Nextを押します。

MySQLの接続1

次のウィンドウでExecuteを押し、終わったらFinishを押します。

MySQLの接続2

その後のウィンドウではNextを押し、このウィンドウに到達したらFinishを押します。

MySQLのインストール完了

ユーザー環境変数のPathに以下をjdkのパスとMySQLのパスを追加します。

下記は例です。

C:\pleiades-2020-03-java-win-64bit-jre_20200322\pleiades\java\11\bin

C:\Program Files\MySQL\MySQL Server 8.0\bin

それぞれ、

java -version
mysql --version

でバージョンが表示されればOKです。

サーバの準備

Eclipseを開き、ヘルプ→Eclipseマーケットプレースへと進みます。

JBoss」で検索し、「JBossツール 4.15.0.Final」をインストールします。

JBossをインストール

警告が出たらインストールを選択します。

ソフトウェア更新が表示されたら、今すぐ再起動を押しましょう。

再起動したらウィンドウ→ビューの表示→その他と進み、サーバーを選択します。

サーバービューの表示

サーバービューが表示されたら、「使用可能なサーバーがありません。・・・」というところをクリックします。

サーバーの選択

ウィンドウが表示されたら「WildFly11」を選択します。

その後、次へを押し続け、以下のウィンドウが表示されたら「ダウンロードしてランタイムをインストール」を押します。

ランタイムをインストール1

WildFly 11.0.0 Finalを選択し、完了を押します。

ランタイムをインストール2

インストールが終わったら完了を押します。

おわりに

今回はJSFを使うための環境構築を行いました。

とうとうWindows Terminalが登場!インストール方法と使い方を解説

f:id:talosta:20200330151413p:plain


先日「Window Terminal」が正式リリースされました。

Window Terminalはタブ機能を持っているので、コマンドプロンプトPowerShell、WSLなどのコマンドラインツールを複数開くことができます。

WSLなどを使って開発している人はぜひインストールしてみてください。

Windows Terminalをインストール

まず、Microsoft Storeを開きましょう。

開いたら検索窓で「Windows Terminal」と打ち込みます。

Preview版ではない方をインストールしましょう。

MicroSoft Storeを開く


GitHubからもインストールできますが、自動で更新されないためMicrosoft Storeからのインストールをおすすめします。

使い方

早速Window Terminalを開いてみましょう。

デフォルトではPowerShellになっています。

新しいタブを開く

+を押すと新しいタブを開けます。

新しいタブを開く

「Ctrl+Shift+t」でも開けます。


他のコマンドラインツールを開くには、+の右隣にあるvを押します。

他のコマンドラインツールを開く

WSLなどがインストールされている場合、ここから開けます。

新しいペインを開く

「Alt+Shift++」(AltとShiftと+を同時押し)で垂直方向に分割できます。

垂直方向に分割

また、「Alt+Shift+-」で水平方向に分割できます。

水平方向に分割

おわりに

今回はWindows Terminalのインストール方法と使い方を解説しました。

Windowsでの開発が捗りそうで楽しみです。

はじめてのC++ ~クラス編~

f:id:talosta:20200505143241p:plain


今回はC++クラスについて説明します。

このあたりから急に難しくなり、挫折する人も多いのでしっかり学びましょう。

オブジェクト指向についてまだ勉強していない人は、先にこちらを読んでみてください。

talosta.hatenablog.com

クラスの宣言

「myclass.h」というファイルを作り、以下のようなコードを書いてみてください。

class myclass {
    int age;

public:
    void set_age(int n);
    int get_age();
};

まず、

class myclass{ 
}

でクラス名を指定します。


次に

int age;

メンバ変数の宣言です。

アクセス指定子が書いていない場合はprivateです。

つまり、変数ageは他のクラスからは見えません。

アクセスの範囲を変えたい場合は

public:

のように書きます。

"public:"と書かれた場所以降のすべてのメンバは、他のクラスからアクセス可能になります。

void set_age(int n);
int get_age();

は関数のプロトタイプ宣言と呼ばれます。

戻り値 関数名(仮引数);

というように書きます。

ヘッダファイルの概要

C++ではクラスの定義やメンバ関数のプロトタイプ宣言、メンバ変数の宣言をヘッダファイルに書き、メンバ関数の定義はソースファイルに書くのが一般的です。

ヘッダファイルには「.h」拡張子を付けます。

また、対応するソースファイルと拡張子以前のファイル名を同じにします。

(ソースファイルがfile.cppならヘッダファイルはfile.hとする)

関数の定義

今のままでは関数の中身が定義されていません。

「myclass.cpp」ファイルに以下のコードを記述してください。

#include "myclass.h"

void myclass::set_age(int n) {
    age = n;
}

int myclass::get_age() {
    return age;
}

ヘッダファイルをインクルードするのを忘れないようにしましょう。

「::」はクラスの型名と関数名をリンクするためのスコープ解決演算子と呼ばれます。

main関数

main関数は一番最初に実行される関数です。

「main.cpp」というファイルに以下のコードを記述してください。

#include <iostream>
#include "myclass.h"

int main() {
    myclass yamada;

    yamada.set_age(20);

    int age = yamada.get_age();

    std::cout << age << "\n";
}

まず、

myclass yamada;

でmyclass型のyamadaオブジェクトを宣言します。


次に、メンバ関数を呼び出す際は、「オブジェクト名.関数名」で行います。

yamada.set_age(20);

int age = yamada.get_age();

上のコードはそれぞれメンバ関数を呼び出しています。


コンパイルは以下のように行います。

g++ main.cpp myclass.cpp -o main

実行すると「20」と表示されるはずです。

おわりに

今回はクラスについて説明しました。