<?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>ITドカタ</title>
	<atom:link href="https://blog.it-see.net/it-dokata/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.it-see.net/it-dokata</link>
	<description>ICT関連の役立つかもしれない情報を発信するブログ。</description>
	<lastBuildDate>Sun, 20 Mar 2022 09:39:39 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>

<image>
	<url>https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/05/cropped-job_it_dokata2-32x32.png</url>
	<title>ITドカタ</title>
	<link>https://blog.it-see.net/it-dokata</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>tclshでBash(シェル)のようなコマンド履歴機能を使うには</title>
		<link>https://blog.it-see.net/it-dokata/tcl-tk/tclsh-command-history/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Thu, 12 Aug 2021 11:08:05 +0000</pubDate>
				<category><![CDATA[Tcl/Tk]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1947</guid>

					<description><![CDATA[Tclインタプリタにはコマンド履歴機能がありません。この記事ではtclshとrlwrapコマンドを組み合わせてヒストリ機能を使う方法を紹介します。 Tclを対話的に実行する tclshを引数なしで実行するとTclインタプ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Tclインタプリタにはコマンド履歴機能がありません。この記事ではtclshとrlwrapコマンドを組み合わせてヒストリ機能を使う方法を紹介します。</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Tclを対話的に実行する</h2>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>tclshを引数なしで実行するとTclインタプリタが起動し、Tclコマンドの入力待ち状態になります。この状態でTclコマンドを入力する事で対話的にコマンドを実行する事ができます。</p>



<p>この機能はコマンド動作のちょっとした確認をする際に便利です。しかし、TclインタプリタにはBash(Unixシェル)のようなコマンド履歴機能がなかったり、左右の矢印キーでコマンドライン上を移動できないのでシェルとしては使いやすいとは言えません。</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ tclsh
% set x hello!
hello!
% puts $x
hello!
% ^[[A   ← 上矢印キーを押すとこのようになります。</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold"><span class="marker-under-red">上矢印キーを押すと実行例のように「 ^[[A 」が表示されコマンド履歴を表示する事ができません。</span></span></p>



<p><span class="marker-under">※WindowsのコマンドプロンプトやPowerShellでは上矢印キーでコマンド履歴を表示します。</span></p>



<p>Bash、tcsh、zshのようなUnixシェルにはコマンド履歴機能(ヒストリ機能)があり、カーソルキーで過去に入力したコマンドを呼び出す事ができます。</p>



<p>これと同じ機能がtclshを起動した時にも使えるようにする方法を紹介します。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="blogcard-shortcode-wrap paragraph">[参考]<br>
<a rel="noopener" href="https://wiki.tcl-lang.org/page/rlwrap" title="rlwrap" 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 decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwiki.tcl-lang.org%2Fpage%2Frlwrap?w=160&#038;h=107" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="107" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">rlwrap</div><div class="blogcard-snippet external-blogcard-snippet">Tclers wiki</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 decoding="async" src="https://www.google.com/s2/favicons?domain=https://wiki.tcl-lang.org/page/rlwrap" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">wiki.tcl-lang.org</div></div></div></div></a></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">tclshとrlwrapコマンドを組み合わせて使う</h2>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong><span class="marker-under-red">tclshとrlwrapコマンドを組み合わせる事により矢印キーでコマンド履歴を呼び出せます。</span></strong></p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ rlwrap tclsh
% set x hello!
hello!
% puts $x
hello!
% puts $x ←上矢印キーを押すと直前のコマンドを表示します。</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>環境設定ファイルに以下の設定を追加する事で、rlwrap を入力せずに済みます。</p>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Bシェル系</p>



<pre class="nohighlight">alias tclsh='rlwrap tclsh'</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Cシェル系</p>



<pre class="nohighlight">alias tclsh 'rlwrap tclsh'</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>環境設定ファイルは、.profile、.bashrc、.cshrcなど。自分の環境に合わせてください。</p>



<p>rlwrapの詳し使い方はman rlwrap などで調べてください。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">rlwrapのインストール</h2>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>rlwrapがない場合はインストールしてください。</p>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ rlwrap tclsh
bash: rlwrap: コマンドが見つかりませんでした...</pre>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[CentOS 7 の例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ sudo yum -y install rlwrap</pre>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[FreeBSDの例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg install rlwrap</pre>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold"><span class="marker-under-red">CentOSの場合、EPEL(Extra Packages for Enterprise Linux)が使える環境でないとインストールできません。その場合、次の項目を参照してください。</span></span></p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">EPELのインストール</h3>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ sudo yum install epel-release</pre>



<p>上記でインストールできな場合は、次のようにEPELのソースをダウンロードしてインストールしてください。</p>



<p>[EPELのダウンロード]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ sudo wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
</pre>



<p>[EPELのインストール]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ sudo rpm -ivh epel-release-latest-7.noarch.rpm
</pre>



<p>[EPELリポジトリを有効化する]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ sudo yum-config-manager --enable epel</pre>



<p>EPEが使えるようになったら次のコマンドでrlwrapをインストールします。</p>



<p>[rlwrapコマンドのインストール]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ sudo yum -y install rlwrap
</pre>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FreeBSD &#8211; tpm-emulatorのインストールが失敗する。</title>
		<link>https://blog.it-see.net/it-dokata/freebsd/tpm-emulator-installation-failed/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 14 Aug 2020 15:32:43 +0000</pubDate>
				<category><![CDATA[FreeBSD]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1665</guid>

					<description><![CDATA[パッケージのアップグレードを実施した時に、tpm-emulatorで次のメッセージを表示して失敗しました。 The process will require 195 MiB more space. [1/83] Inst [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="720" height="400" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面.png" alt="" class="wp-image-972" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面.png 720w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面-300x167.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>パッケージのアップグレードを実施した時に、tpm-emulatorで次のメッセージを表示して失敗しました。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">The process will require 195 MiB more space.
[1/83] Installing tpm-emulator-0.7.4_2...
===&gt; Creating groups.
Using existing group '_tss'.
===&gt; Creating users
Creating user '_tss' with uid '601'.
pw: user '_tss' disappeared during update
pkg: PRE-INSTALL script failed
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[対処方法]<br>次のコマンドを実行後にパッケージのアップグレードを実施する。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pwd_mkdb -p /etc/master.passwd
# pwd_mkdb /etc/master.passwd
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>参考にしたページ<br>Bug 244744 &#8211; emulators/tpm-emulator: package does not install<br><a rel="noopener" href="https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=244744" target="_blank">https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=244744</a></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>そもそもtpm-emulatorって何をするソフトか？</p>



<p>ちょっと調べてみました。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-brown-border-color"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">メモ</span></div><div class="tab-caption-box-content block-box-content box-content">
<p><strong>TPM(Trusted Platform Module)</strong>は、セキュリティ関連の機能を提供するセキュリティチップで、主にマザーボードに実装されています。<br><br>このチップは暗号化をする際の暗号化キーやデジタル署名を生成します。これを使ってソフトウェアの改ざんやハードウエアの改変などをチェックできる仕組みを提供します。<br><br><strong>tpm-emulator</strong>はこのチップと同じ機能をソフトウェアで実装したものです。<br><br>このエミュレーターを使うと、TPMを実装していないパソコン・サーバーやVMなどの仮想環境にTPMを備えた環境を構築する事ができるようです。</p>
</div></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FreeBSD 12.1-RELEASEにアップグレード後、マウスクリックができない。</title>
		<link>https://blog.it-see.net/it-dokata/freebsd/mouse-click-does-not-work/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 14 Aug 2020 15:27:19 +0000</pubDate>
				<category><![CDATA[FreeBSD]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1646</guid>

					<description><![CDATA[FreeBSD 11.3-RELEASEからFreeBSD 12.1-RELEASEにアップグレード後、マウスクリックができなくなりました。 同じような事象で困っているかたの参考になれば幸いです。 [環境]Windows [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1024" height="768" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSDデスクトップ001.png" alt="" class="wp-image-1650" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSDデスクトップ001.png 1024w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSDデスクトップ001-300x225.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSDデスクトップ001-768x576.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>FreeBSD 11.3-RELEASEからFreeBSD 12.1-RELEASEにアップグレード後、マウスクリックができなくなりました。</p>



<p>同じような事象で困っているかたの参考になれば幸いです。</p>



<div style="height:23px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[環境]<br>Windows8.1上のVirtualBox6.1</p>



<p>[状況]</p>



<ul class="wp-block-list"><li>FreeBSD 11.3-RELEASEからFreeBSD 12.1-RELEASEにアップグレード</li><li>pkg-static install -fy pkgでパッケージのアップグレード</li></ul>



<p>その後、GDM(GNOME Display Manager)でログインしようとしたところマウスクリックができないことに気づく。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">やったこと</span></p>



<p>〇VirtualBoxの設定：VBoxSVGA⇒VBoxVGA 変わらない。<br>〇usr/local/etc/X11/xorg.conf.d 配下のxxxxx.confをリネーム。<br>※xxxxx.confは自分で設定したファイルです。<br>例.<br># mv driver-vbox.conf driver-vbox.conf.bk<br><br>〇ネットで検索。<br>日本語の記事はヒットせず。<br>FreeBSDのフォーラム(英語)でヒントになる記事を発見。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[対処方法]</p>



<p>1./etc/rc.confのmousedサービスを無効にする。<br>かつ<br>2./etc/sysctl.confに以下設定を追加する。<br><br>kern.evdev.rcpt_mask=6<br><br>3.再起動をして反映させる。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>この方法でマウスクリックがきるようになりました。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>最近のX Window Systemはキーボードやマウスの設定をconfファイルで設定しなくても自動で認識したり、デスクトップマネジャー側で設定するのでリネームしたxxxxx.confは元に戻していません。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[参考]</p>



<p>この方法は、xorg-serverをインストールした際に表示されるメッセージの中にありました。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ pkg info -D xorg-server
xorg-server-1.20.8_2,1:
On install:
Xorg-server has been installed.

If your kernel is compiled with the EVDEV_SUPPORT option enabled
(default starting from FreeBSD 12.1) it is recommended to enable evdev mode in
pointer device drivers like ums(4) and psm(4). This will give improvements like
better tilt wheel support for mice and centralized gesture support via
xf86-input-synaptics or libinput drivers for touchpads.

This is also needed for PS/2 devices to be properly detected by Xorg when
moused service is disabled in /etc/rc.conf and kernel is compiled with
EVDEV_SUPPORT.

To enable evdev in such a device, run the following:

# sysctl kern.evdev.rcpt_mask=6

To make it persistent across reboots, add the following to /etc/sysctl.conf:

kern.evdev.rcpt_mask=6

In case you're using a serial mouse or any other mouse that *only* works over
sysmouse(4) and moused(8) on an evdev enabled kernel, please run this:

# sysctl kern.evdev.rcpt_mask=3

To make it persistent across reboots, add to this /etc/sysctl.conf:

kern.evdev.rcpt_mask=3

</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Google先生に翻訳をお願いしました。</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-brown-border-color"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">翻訳</span></div><div class="tab-caption-box-content block-box-content box-content">
<p>カーネルがEVDEV_SUPPORTオプションを有効にしてコンパイルされている場合（デフォルトはFreeBSD 12.1以降）、ums（4）やpsm（4）などのポインターデバイスドライバーでevdevモードを有効にすることをお勧めします。<br>これにより、マウスのチルトホイールサポートの改善や、xf86-input-synapticsまたはタッチパッドのlibinputドライバーを介した集中型ジェスチャーサポートなどの改善がもたらされます。<br><br>これは、mousedサービスが/etc/rc.confで無効になっていて、カーネルがEVDEV_SUPPORTでコンパイルされているときに、PS/2デバイスがXorgによって正しく検出されるためにも必要です。</p>
</div></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="blogcard-shortcode-wrap paragraph">参考にしたページ<br>
<a rel="noopener" href="https://forums.freebsd.org/threads/freebsd-12-1-release-p3-mouse-click-no-longer-works-after-pkg-upgrade-mate-desktop.74962/" title="MATE - FreeBSD 12.1-RELEASE-p3 - mouse click no longer works after pkg upgrade (Mate Desktop)" 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://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/cocoon-resources/blog-card-cache/fe11eb283855d61a02eafeb80e014bdc.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="107" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">MATE - FreeBSD 12.1-RELEASE-p3 - mouse click no longer works after pkg upgrade (Mate Desktop)</div><div class="blogcard-snippet external-blogcard-snippet">I have been using FreeBSD 12 with Mate in VirtualBox (on a Mac) for some time now for testing purposes. Desktop is Mate....</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://forums.freebsd.org/threads/freebsd-12-1-release-p3-mouse-click-no-longer-works-after-pkg-upgrade-mate-desktop.74962/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">forums.freebsd.org</div></div></div></div></a></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FreeBSD &#8211; システムをアップデート(更新)するには</title>
		<link>https://blog.it-see.net/it-dokata/freebsd/freebsd-update/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 14 Aug 2020 15:20:12 +0000</pubDate>
				<category><![CDATA[FreeBSD]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1608</guid>

					<description><![CDATA[アップデートの種類 [バージョン番号の振られ方] FreeBSDにはシステムを更新するために、freebsd-updateコマンドが用意されています。freebsd-updateコマンドでは以下に示す３種類の更新を実行す [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="720" height="400" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面.png" alt="" class="wp-image-972" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面.png 720w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面-300x167.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">アップデートの種類</h2>



<p>[バージョン番号の振られ方]</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="867" height="585" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSD-バージョン番号の振られ方と更新の種類.png" alt="FreeBSDのバージョン番号" class="wp-image-1609" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSD-バージョン番号の振られ方と更新の種類.png 867w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSD-バージョン番号の振られ方と更新の種類-300x202.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSD-バージョン番号の振られ方と更新の種類-768x518.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSD-バージョン番号の振られ方と更新の種類-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/FreeBSD-バージョン番号の振られ方と更新の種類-160x107.png 160w" sizes="(max-width: 867px) 100vw, 867px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>FreeBSDにはシステムを更新するために、freebsd-updateコマンドが用意されています。freebsd-updateコマンドでは以下に示す３種類の更新を実行する事ができます。</p>



<ul class="wp-block-list"><li>セキュリティの脆弱性と不具合の修正(アップデート)</li><li>マイナーバージョンのアップグレード</li><li>メジャーバージョンのアップグレード</li></ul>



<p>アップデートでは、プログラムの一部分を更新します。それに対してアップグレードでは、プログラム(システム)全体を新しく更新します。アップグレードの事をバージョンアップとも言います。</p>



<p>アップグレードによる更新ではプログラム(システム)自体が変わるため、新しく機能が追加されたり、動作要件が変わる事があります。特にメジャーリリースへのアップグレードでは、パッケージソフトのアップグレードも必要になります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">セキュリティの脆弱性と不具合の修正</h3>



<p>このアップデートはセキュリティの脆弱性と不具合をパッチレベルで修正します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>パッチ(patch)は英語で、「つぎあて」、「一区画」というような意味があり、プログラムの一部分を修正する場合に「パッチを当てる」、「パッチを適用する」などと言います。</p>



<p>FreeBSDでは、リリース公開後に見つかったセキュリティの脆弱性は、セキュリティ勧告(Security Advisories)として報告されます。それ以外の問題については不具合情報(Errata)として報告されます。</p>



<p>セキュリティ勧告とErrata情報はFreeBSD公式サイトのトップページまたは以下のページで一覧を確認できます。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" href="https://www.freebsd.org/ja/" target="_blank">FreeBSD公式サイト(日本語)</a><br><a rel="noopener" href="https://www.freebsd.org/security/advisories.html" target="_blank">セキュリティ勧告(Security Advisories)</a><br><a rel="noopener" href="https://www.freebsd.org/security/notices.html" target="_blank">不具合情報(Errata)</a></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">マイナーバージョンのアップグレード</h3>



<p>この更新では、FreeBSD11.0からFreeBSD11.1のようにマイナーバージョンの更新を行います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>マイナーバージョンの更新では、ほとんどの場合パッケージソフトはそのままでも動作します。しかし、パッケージソフトも脆弱性や不具合がないとは言い切れないので更新する事をお勧めします。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">メジャーバージョンのアップグレード</h3>



<p>この更新では、FreeBSD11.xからFreeBSD12.xのようにメジャーバージョンの更新を行います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>メジャーバージョンの更新はシステムに大きな変更が加えられるので、そのままでは動作しないパッケージソフトが出てくる可能性があります。そのためパッケージのアップグレードも必要になってきます。必要に応じて旧パッケージソフトの削除、新パッケージソフトのインストールが必要になる場合もあります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">保守終了時期</h2>



<p>FreeBSD各リリースの保守終了予定日は以下のページで確認できます。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>サポートされている FreeBSD のリリース<br><a rel="noopener" href="https://www.freebsd.org/ja/security/#sup" target="_blank">https://www.freebsd.org/ja/security/#sup</a></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>使用中のリリースがいつまでサポートされているか確認し、保守終了予定日になる前に適切にシステムを更新することをお勧めします。</p>



<p>また、リリースの更新だけでなく定期的にセキュリティ勧告を確認して必要に応じてセキュリティアップデートを実行することが望ましいと思います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">作業前の確認</h2>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">データのバックアップ</h3>



<p>freebsd-updateコマンドにはロールバックの機能があり、更新がうまくいかなかった場合、最後に更新されたところまで戻す事ができます。</p>



<p>しかし、更新が失敗してシステムが起動しなくなった場合の事を考えて更新する前にバックアップを取る事をお勧めします。</p>



<p>少なくともドキュメントファイル、マルチメディアファイル、データベースファイルなどのデータはバックアップしておかないと消えたら元に戻せません。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">現版数(バージョン)の確認</h3>



<p>使用中のバージョンは以下のコマンドで確認できます。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># uname -srm
FreeBSD 11.3-RELEASE-p3 amd64
</pre>



<p>[オプション]<br>-s operating system<br>-r current release level<br>-m current hardware platform</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>unameコマンドで表示される版数はカーネルに適用されたパッチレベルの修正を含むカーネルの版数になります。</p>



<p>セキュリティパッチは、カーネルにだけ適用されるものではないのでカーネルの修正を伴わない更新がされている場合、適用されている版数よりもunameコマンドで表示される版数が低い場合があります。</p>



<p>カーネル以外の修正を含む版数を確認するには以下の方法で確認します。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># freebsd-version -kur
11.3-RELEASE-p11
11.3-RELEASE-p11
11.3-RELEASE-p11
</pre>



<p>[オプション]</p>



<dl>
  <dt>-k installed kernel</dt>
  <dd>インストールされているカーネルの版数(パッチレベルを含む)を表示します。更新中にまだ再起動していない状態(旧カーネルで稼働中)では、新しいカーネルの版数(パッチレベルを含む)を表示します。</dd>
  <dt>-u installed userland</dt>
  <dd>ユーザーランドにインストールされた版数(パッチレベルを含む)を表示します。カーネル以外の修正を含む版数を確認するにはこのオプションで確認します。</dd>
  <dt>-r running kernel</dt>
  <dd>稼働中のカーネルの版数(パッチレベルを含む)を表示します。</dd>
</dl>



<h2 class="wp-block-heading">セキュリティパッチの適用方法</h2>



<p>セキュリティパッチを適用するには次のようにします。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># freebsd-update fetch
# freebsd-update install
# shutdown -r now
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>再起動後、アップデートされているか確認する。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># uname -srm
FreeBSD 11.3-RELEASE-p11 amd64

# freebsd-version -kur
11.3-RELEASE-p11
11.3-RELEASE-p11
11.3-RELEASE-p11
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">リリースのアップグレード方法</h2>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">マイナーバージョンのアップグレード</h3>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box alert-box">
<p>所々で次に何をしなさいというメッセージを表示する事があるので見逃さずに実施する事！</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>例. 11.3-RELEASE ⇒ 11.4-RELEASE</p>



<ol class="wp-block-list"><li>使用中のリリースのセキュリティパッチを実施する。</li><li>マイナーリリースのアップグレードを実施する。</li></ol>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># freebsd-update upgrade -r 11.4-RELEASE
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>現リリースから新リリースの間に行われた変更について、いくつか質問がきた時は、コメントを確認しながら「y」で応答する。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>上記メッセージを表示し、コマンドプロンプトに戻ったら以下のコマンドの入力する。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># freebsd-update install
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ここで<span class="marker-under"><strong>再起動後に再度 install をするようにメッセージを表示する</strong></span>のでメッセージを確認して必ず実行する事。</p>



<pre class="nohighlight">src component not installed, skipped
Installing updates...
Kernel updates have been installed.  <span class="red-under">Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.</span>
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># shutdown -r now
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo block-box has-border-color has-brown-border-color">
<p>この状態でfreebsd-versionを実行すると以下のような表示になります。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># freebsd-version -kur
11.4-RELEASE-p1
11.4-RELEASE-p1
11.3-RELEASE-p11
</pre>



<p></p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># freebsd-update install
src component not installed, skipped
Installing updates... done.
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「Installing updates… done.」と表示したら完了なので再起動する。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># shutdown -r now
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>再起動後、アップデートされているか確認する。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># uname -srm
FreeBSD 11.4-RELEASE-p1 amd64

# freebsd-version -kur
11.4-RELEASE-p1
11.4-RELEASE-p1
11.4-RELEASE-p1
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">メジャーバージョンのアップグレード</h3>



<ol class="wp-block-list"><li>使用中のリリースのセキュリティパッチを実施する。</li><li>現行リリースの最終マイナーバージョンまでアップグレードを実施する。</li><li>メジャーリリースのアップグレードを実施する。</li></ol>



<p>やり方は基本的にマイナーリリースのアップグレードと同じです。</p>



<p>例.11.4-RELEASE ⇒ 12.1-RELEASE</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># freebsd-update upgrade -r 12.1-RELEASE
# freebsd-update install
# shutdown -r now
# freebsd-update install
# freebsd-update install
# shutdown -r now
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">パッケージソフトのアップデート</h2>



<p>通常は次の操作でパッケージソフトをアップデートします。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg update -f
# pkg upgrade -y
# shutdown -r now
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>メジャーリリースのアップグレードを行った場合、以下の操作を実行してパッケージも新リリース向けにアップグレードする必要があります。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg-static install -fy pkg
# pkg upgrade -y
# freebsd-update install
# shutdown -r now
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="blogcard-shortcode-wrap paragraph">pkgコマンドについては次の記事で紹介しています。<br><a href="https://blog.it-see.net/it-dokata/freebsd/pkg/" title="FreeBSD - パッケージソフトのインストールと削除、アップデートのやり方" 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="107" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/09/GNOMEデスクトップ3-160x107.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/09/GNOMEデスクトップ3-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/09/GNOMEデスクトップ3-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/09/GNOMEデスクトップ3-320x213.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">FreeBSD - パッケージソフトのインストールと削除、アップデートのやり方</div><div class="blogcard-snippet internal-blogcard-snippet">FreeBSDではソフトウェアの管理にpkgコマンドを使います。この記事ではpkgコマンドのマニュアルを見る際のコツと基本的な操作(install, delete, update, upgradeなど)を紹介しています。</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://blog.it-see.net/it-dokata" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">blog.it-see.net</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.08.15</div></div></div></div></a></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FreeBSD &#8211; パッケージソフトのインストールと削除、アップデートのやり方</title>
		<link>https://blog.it-see.net/it-dokata/freebsd/pkg/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 14 Aug 2020 15:03:26 +0000</pubDate>
				<category><![CDATA[FreeBSD]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1624</guid>

					<description><![CDATA[FreeBSDではWebサーバ、ブラウザ、メールソフトなどのソフトウェアのインストールはpkgコマンドで管理します。 pkgコマンドのhelpやmanコマンドによるマニュアルを見るにはちょっとしたコツが必要です。 この記 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="720" height="400" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面.png" alt="" class="wp-image-972" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面.png 720w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/08/起動オプション画面-300x167.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>FreeBSDではWebサーバ、ブラウザ、メールソフトなどのソフトウェアのインストールはpkgコマンドで管理します。</p>



<p>pkgコマンドのhelpやmanコマンドによるマニュアルを見るにはちょっとしたコツが必要です。</p>



<p>この記事ではpkgコマンドのマニュアルを見るコツとpkgコマンドの基本的な操作(インストール、削除、アップデートなど)を紹介しています。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">パッケージ管理のしくみ</h2>



<p class="has-text-align-center">[ざっくりしたイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="870" height="591" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/パッケージ管理のしくみ.png" alt="FreeBSD パッケージ管理のイメージ" class="wp-image-1627" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/パッケージ管理のしくみ.png 870w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/パッケージ管理のしくみ-300x204.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/08/パッケージ管理のしくみ-768x522.png 768w" sizes="(max-width: 870px) 100vw, 870px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>リポジトリとは、貯蔵庫、保管場所といった意味があり、パッケージやパッケージ管理に必要なデータの保管場所のことを言います。</p>



<p>「pkg update」は、リモートパッケージリポジトリデータベースからリポジトリカタログのローカルコピーを更新するために使用されます。</p>



<p>通常、カタログの更新は、リモートパッケージリポジトリのマスターコピーがローカルコピーよりも新しい場合にのみダウンロードされます。</p>



<p>更新するリポジトリカタログは、pkg.conf（5）ファイルまたは/usr/local/etc/pkg/reposのエントリで定義されます。 詳細については、pkg.conf（5）を参照してください。</p>



<p>通常は、pkg updateを明示的に実行する必要は通常ありません。デフォルトでは、pkg.conf（5）でREPO_AUTOUPDATEをfalseに設定して無効にしない限り、pkg installまたはpkg upgradeのいずれかを呼び出すと、リポジトリカタログが自動的に更新されます。</p>



<p>FreeBSDのリリースアップデートを実施した際には、「pkg update」または「pkg update -f」で強制的にアップデートする必要が生じることがあります。</p>



<p>FreeBSDをメジャーアップグレードした際には、「pkg-static」でpkgバイナリツールを新しいものに置き換えることを勧めています。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">pkgコマンドのマニュアルの見方</h2>



<p>pkgコマンドのマニュアルは「pkg help」または「man pkg」で見る事ができます。</p>



<p>pkgコマンドのマニュアルは、このコマンドがどのような引数を指定するようになっているか理解しないと、ちょっと難解に感じます。</p>



<p>このコマンドの構文は大雑把にいうと次のようになっています。</p>



<pre class="nohighlight">pkg [OPTIONS] &lt;command&gt; &lt;flags&gt;
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>pkgコマンドの引数にはサブコマンドを指定する事ができます。[OPTIONS]で指定するオプションはpkgコマンドのオプションになります。</p>



<p>例えば、</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg -v
</pre>



<p>のように指定します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>&lt;command&gt;にはサブコマンドを指定します。&lt;flags&gt;にはサブコマンドのオプションを指定します。</p>



<p>例えば、</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg install firefox
# pkg update -f
</pre>



<p>のように指定します。</p>



<p>「update」がサブコマンド、「-f」がサブコマンドのオプションになります。</p>



<p>各サブコマンドのマニュアルは「pkg help &lt;command&gt;」または「man pkg-&lt;command&gt;」で見る事ができます。</p>



<p>例えば、</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg help install
# man pkg-install
</pre>



<p>のように指定します。</p>



<p>つまり、<span class="marker-under">pkgコマンドの使い方を確認するにはpkgコマンドとサブコマンドのマニュアルを見る必要があります。</span></p>



<p>また、「pkg help」と「man pkg」で表示する内容には部分的に表現の違いがあります。<br>一例をあげると以下のようなものがります。</p>



<figure class="wp-block-table aligncenter"><table><tbody><tr><th class="has-text-align-center" data-align="center">helpの表記</th><th class="has-text-align-center" data-align="center">manコマンドの表記</th></tr><tr><td class="has-text-align-center" data-align="center">Global options supported:</td><td class="has-text-align-center" data-align="center">OPTIONS</td></tr><tr><td class="has-text-align-center" data-align="center">Commands supported:</td><td class="has-text-align-center" data-align="center">COMMANDS</td></tr><tr><td class="has-text-align-center" data-align="center">&lt;args&gt;</td><td class="has-text-align-center" data-align="center">&lt;flags&gt;</td></tr><tr><td class="has-text-align-center" data-align="center">Display pkg(8) version</td><td class="has-text-align-center" data-align="center">Display the current version of pkg.</td></tr><tr><td class="has-text-align-center" data-align="center">Updates package repository catalogues</td><td class="has-text-align-center" data-align="center">Update the available remote repositories as listed in pkg.conf(5).</td></tr></tbody></table></figure>



<p>表現方法が違うだけで言いたいことは同じです。</p>



<p>見方が分かったところで次に、よく使いそうな基本的な使い方を紹介します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">pkgコマンドの基本的な使い方</h2>



<p><span class="bold">リモートパッケージリポジトリで指定したパッケージを探す。</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg search php74
php74を含むパッケージの一覧が表示されます。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>パッケージ名には正規表現が使えます。</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg search '^php74-[0-9]'
php74-7.4.8                    PHP Scripting Language
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">ソフトウェア(パッケージ)のインストール</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg install php74
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">ソフトウェア(パッケージ)の削除</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg delete php74
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">インストールされているパッケージ情報を調べる</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">パッケージ一覧から指定したパッケージを抽出する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info | grep firefox
firefox-71.0_2,1               Web browser based on the browser portion of Mozilla
firefox-i18n-65.0.2            Localized interface for Firefox
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">パッケージとそのコメントを表示する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -I firefox
firefox-79.0,1                 Web browser based on the browser portion of Mozil
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">パッケージの各種情報を調べる</h2>



<p><span class="bold">パッケージの詳しい情報を調べる</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -f ja-ibus-anthy
ja-ibus-anthy-1.5.11
Name           : ja-ibus-anthy
Version        : 1.5.11
Installed on   : Sat Aug  1 03:01:06 2020 JST
Origin         : japanese/ibus-anthy
Architecture   : FreeBSD:12:amd64
Prefix         : /usr/local
Categories     : japanese
Licenses       : GPLv2
Maintainer     : ********@nifty.ne.jp
WWW            : https://github.com/ibus/ibus-anthy
Comment        : Anthy engine for IBus
Shared Libs required:
	libanthy.so.1
	libintl.so.8
	libglib-2.0.so.0
	libgobject-2.0.so.0
	libanthydic.so.1
Shared Libs provided:
	libanthygobject-1.0.so.5
Annotations    :
	FreeBSD_version: 1201000
	repo_type      : binary
	repository     : FreeBSD
Flat size      : 8.85MiB
Description    :
Anthy engine for IBus.

WWW: https://github.com/ibus/ibus-anthy

</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">パッケージのファイルサイズを調べる</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -s firefox
firefox-71.0_2,1               207MiB
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">指定したパッケージが依存しているパッケージのリストを表示する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -d ja-ibus-anthy
ja-ibus-anthy-1.5.11:
	pango-1.42.4_4
	ibus-1.5.22
	python37-3.7.8
	ja-anthy-0.4_2,1
	gtk-update-icon-cache-3.24.20
	gdk-pixbuf2-2.40.0
	py37-gobject3-3.28.3_1
	glib-2.56.3_8,1
	gettext-runtime-0.20.2
	atk-2.36.0
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">指定したパッケージを必要とするパッケージのリストを表示する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -r ibus
ibus-1.5.22:
	ja-ibus-anthy-1.5.11
	gnome-control-center-3.28.2_6
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">指定したパッケージで提供されるすべての共有ライブラリを表示する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -b ja-ibus-anthy
ja-ibus-anthy-1.5.11:
	libanthygobject-1.0.so.5
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">指定したパッケージで使用されるすべての共有ライブラリを表示する<span class="bold"></span></span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -B ja-ibus-anthy
ja-ibus-anthy-1.5.11:
	libanthy.so.1
	libintl.so.8
	libglib-2.0.so.0
	libgobject-2.0.so.0
	libanthydic.so.1
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">指定したパッケージのインストール先(パス、ファイル名)を表示する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -l firefox
firefox-79.0,1:
	/usr/local/bin/firefox
	/usr/local/lib/firefox/application.ini
	/usr/local/lib/firefox/browser/chrome/icons/default/default128.png
	/usr/local/lib/firefox/browser/chrome/icons/default/default16.png
	/usr/local/lib/firefox/browser/chrome/icons/default/default32.png
	/usr/local/lib/firefox/browser/chrome/icons/default/default48.png
	/usr/local/lib/firefox/browser/chrome/icons/default/default64.png
	/usr/local/lib/firefox/browser/features/doh-rollout@mozilla.org.xpi
	/usr/local/lib/firefox/browser/features/formautofill@mozilla.org.xpi
	/usr/local/lib/firefox/browser/features/screenshots@mozilla.org.xpi
	/usr/local/lib/firefox/browser/features/webcompat-reporter@mozilla.org.xpi
	/usr/local/lib/firefox/browser/features/webcompat@mozilla.org.xpi
	/usr/local/lib/firefox/browser/omni.ja
	/usr/local/lib/firefox/defaults/pref/channel-prefs.js
	/usr/local/lib/firefox/dependentlibs.list
	/usr/local/lib/firefox/firefox
	/usr/local/lib/firefox/firefox-bin
	/usr/local/lib/firefox/fonts/TwemojiMozilla.ttf
	/usr/local/lib/firefox/gmp-clearkey/0.1/libclearkey.so
	/usr/local/lib/firefox/gmp-clearkey/0.1/manifest.json
	/usr/local/lib/firefox/gtk2/libmozgtk.so
	/usr/local/lib/firefox/liblgpllibs.so
	/usr/local/lib/firefox/libmozavcodec.so
	/usr/local/lib/firefox/libmozavutil.so
	/usr/local/lib/firefox/libmozgtk.so
	/usr/local/lib/firefox/libmozsqlite3.so
	/usr/local/lib/firefox/libmozwayland.so
	/usr/local/lib/firefox/libxul.so
	/usr/local/lib/firefox/omni.ja
	/usr/local/lib/firefox/pingsender
	/usr/local/lib/firefox/platform.ini
	/usr/local/lib/firefox/plugin-container
	/usr/local/lib/firefox/removed-files
	/usr/local/share/applications/firefox.desktop
	/usr/local/share/pixmaps/firefox.png
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">指定したパッケージの説明を表示する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg info -D ja-ibus-anthy
ja-ibus-anthy-1.5.11:
On install:
ibus-anthy installation finished. To use ibus-anthy, please do the following:

If you are using bash, please add following lines to your $HOME/.bashrc:

export XIM=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XIM_PROGRAM="ibus-daemon"
export XIM_ARGS="--daemonize --xim"

If you are using tcsh, please add following lines to your $HOME/.cshrc:

setenv XIM ibus
setenv GTK_IM_MODULE ibus
setenv QT_IM_MODULE ibus
setenv XMODIFIERS @im=ibus
setenv XIM_PROGRAM ibus-daemon
setenv XIM_ARGS "--daemonize --xim"

If you are using KDE4, you may create a shell script in $HOME/.kde4/env,
and add following lines:

#!/bin/sh
export XIM=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XIM_PROGRAM="ibus-daemon"
export XIM_ARGS="--daemonize --xim"

-------------

If you cannot launch the IM selection panel by hitting "Super+space"
(usually "Win+space"), run the "ibus-setup" command and add "Japanese -
Anthy" via the Imput Method tab.

You may also add "ibus-daemon --daemonize --xim" to your ~/.xinitrc or
~/.xsession .
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>パッケージの説明にはインストール後に必要な設定や操作が表示されている事があります。インストール後やアップデート後に問題が発生した場合は、このメッセージを確認する事で問題を解決できる事があります。</p>



<h2 class="wp-block-heading">パッケージのバージョンを調べる</h2>



<p><span class="bold">インストールされているパッケージのパージョンを調べる</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg version 
accerciser-3.22.0                  =
accountsservice-0.6.42             =
adwaita-icon-theme-3.28.0          =
     .
     .
     .
xrdb-1.2.0                         =
xrefresh-1.0.6                     =
xset-1.2.4_3                       =
xsetmode-1.0.0                     ?
xsetroot-1.1.2                     =
xterm-351                          &lt;
xtrans-1.4.0                       =
xvid-1.3.5,1                       &lt;
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[フラグの意味]</p>



<figure class="wp-block-table alignwide"><table><tbody><tr><th class="has-text-align-center" data-align="center">フラグ</th><th>意味</th></tr><tr><td class="has-text-align-center" data-align="center">=</td><td>最新のパッケージ</td></tr><tr><td class="has-text-align-center" data-align="center">&lt;</td><td>インストールされているパッケージのバージョンがcurrentバージョンより古い。</td></tr><tr><td class="has-text-align-center" data-align="center">&gt;</td><td>インストールされているパッケージのバージョンがcurrentバージョンより新しい。</td></tr><tr><td class="has-text-align-center" data-align="center">?</td><td>インストールされたパッケージはインデックスに表示されません。<br>これは、期限切れのインデックスや、まだコミットされていないPRから取られたパッケージが原因である可能性があります。</td></tr><tr><td class="has-text-align-center" data-align="center">!</td><td>インストールされたパッケージはインデックスに存在します。<br>しかし、何らかの理由で インストールされたパッケージのバージョン番号とインデックスの対応するエントリを比較することができませんでした。</td></tr></tbody></table></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">パッケージを指定してバージョンを調べる</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg version -n firefox -v
firefox-71.0_2,1                   &lt;   needs updating (remote has 78.0.2,1)
</pre>



<p>-n 指定したパッケージ名と一致するパッケージを表示する。<br>-v 冗長な表記。アップデート可能なバージョンを表示する。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>アップデート可能なパッケージを調べる</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg version -l '&lt;' -v
</pre>



<p>-l 指定したステータスフラグと一致するパッケージを表示する。<br>-v 冗長な表記。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">パッケージの更新</h2>



<p><span class="bold">インストールされているパッケージをアップグレードする</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg update -f
# pkg upgrade -y
</pre>



<p>-y 確認を求められたらy(yes)で応答する。</p>



<p>上のコマンドは、まずサブコマンドの「update -f」でリモートリポジトリからローカルカタログを強制的に更新しています。</p>



<p>次に「upgrade -y」でインストールされているパッケージソフトウェアを更新します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">FreeBSDをメジャーアップグレードした際の操作</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg-static install -fy pkg
# pkg upgrade -y
# freebsd-update install
# shutdown -r now
</pre>



<p>FreeBSDをメジャーアップグレードした際には、パッケージソフトウェアをインストールする時の将来の問題を防ぐ為にpkgバイナリツールを新しいものに置き換えることを勧めています。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">その他の操作</h2>



<p><span class="bold">依存関係のなくなった不要なパッケージを削除する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg autoremove
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">古いバージョンのパッケージを削除する</span></p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;"># pkg clean
# pkg clean -a
</pre>



<p>-a キャッシュ全体を削除。</p>



<p>「pkg clean」はリモートリポジトリからダウンロードされたパッケージのローカルキャッシュをクリンアップ(掃除)します。ローカルキャッシュには新しいバージョンに置き換えられた古いパッケージ及び提供されなくなったパッケージが保存されています。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 二分探索法(binary search:バイナリサーチ)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/binary-search/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 10:23:09 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1537</guid>

					<description><![CDATA[二分探索法(バイナリサーチ)について 二分探索法は、探索の対象となるデータが、あらかじめ昇順または降順に整列されている場合に使うことができるアルゴリズムです。 このアルゴリズムは、次のような手順で目的の値の位置を調べてい [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">二分探索法(バイナリサーチ)について</h2>



<p>二分探索法は、探索の対象となるデータが、あらかじめ昇順または降順に整列されている場合に使うことができるアルゴリズムです。</p>



<p>このアルゴリズムは、次のような手順で目的の値の位置を調べていきます。</p>



<ol class="wp-block-list"><li>探索する値とデータ列の真ん中にある要素の値を比較します。</li><li>その大小関係により、探索する値が、中央より前半または後半にあるか絞り込みます。</li><li>探索する値と絞り込んだデータ列の真ん中にある要素の値を比較します。</li></ol>



<p>このように探索する範囲を半分ずつ狭めていくことで、目的の値がある位置を特定していきます。</p>



<p>データ列の後方部分でも高速に探索できるので、データ数が多い探索にはリニアサーチよりも有利です。</p>



<p>しかし、データ数が少ない場合や、目的の値が先頭付近にある場合は、リニアサーチのほうが速く探索できます</p>



<p>また、整列されていないデータの探索にはバイナリサーチは使えません。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">二分探索法のイメージ</h2>



<p>以下の図は二分探索法を使ってデータを小さい順(昇順)に並べ替える様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[二分探索法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="870" height="585" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法.png" alt="二分探索法(binary search:バイナリサーチ)のイメージ" class="wp-image-1539" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法.png 870w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法-300x202.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法-768x516.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法-160x107.png 160w" sizes="(max-width: 870px) 100vw, 870px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">サンプルコード</h2>



<p>二分探索法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Tcl</h3>



<p>[サンプル：binary-search.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 二分探索法(binary search:バイナリサーチ)

#  arr   : 数値リスト
# left   : 左端要素のindex
# right  : 右端要素のindex
# center : 中央要素のindex
# target : 探索値

array set arr {0 11 1 13 2 24 3 26 4 35
                5 37 6 46 7 49 8 54 9 68}
parray arr

puts -nonewline "探索値を入力する。: "
flush stdout

set target [gets stdin]

set left 0
set right [expr [array size arr] - 1]

while {$left &lt;= $right} {
    set center [expr ($left + $right)/2]  ;# 要素の真ん中の位置
    if {$arr($center) == $target} {
        puts "探索値: $target は0から数えて $center 番目にあります。"
        exit
    } elseif {$arr($center) &lt; $target} {
        set left [expr $center + 1]
    } else {
        set right [expr $center - 1]
    }
}
puts "探索値: $target は見つかりませんでした。"

</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./binary-search.tcl
arr(0) = 11
arr(1) = 13
arr(2) = 24
arr(3) = 26
arr(4) = 35
arr(5) = 37
arr(6) = 46
arr(7) = 49
arr(8) = 54
arr(9) = 68
探索値を入力する。: 54
探索値: 54 は0から数えて 8 番目にあります。

$ ./binary-search.tcl
arr(0) = 11
arr(1) = 13
arr(2) = 24
arr(3) = 26
arr(4) = 35
arr(5) = 37
arr(6) = 46
arr(7) = 49
arr(8) = 54
arr(9) = 68
探索値を入力する。: 55
探索値: 55 は見つかりませんでした。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Python</h3>



<p>[サンプル：binary-search.py]</p>



<pre class="python">#!/usr/bin/env python3

import sys

# 二分探索法(binary search:バイナリサーチ)

#  arr   : 数値リスト
#   n    : 要素数
# left   : 左端要素のindex
# right  : 右端要素のindex
# center : 中央要素のindex
# target : 探索値

arr = [11, 13, 24, 26, 35, 37, 46, 49, 54, 68]
print(arr)

target = input('探索値を入力する。: ')
target = int(target)    # 文字列から数値に変換

n = len(arr)
left = 0
right = n-1

while left &lt;= right:
    center = (left + right) // 2    # 要素の真ん中の位置
    if arr[center] == target:
        print(f'探索値:{target} は0から数えて {center} 番目にあります。')
        sys.exit()
    elif  arr[center] &lt; target:
        left = center + 1
    else:
        right = center - 1

print(f'探索値:{target} は見つかりませんでした。')

</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./binary-search.py
[11, 13, 24, 26, 35, 37, 46, 49, 54, 68]
探索値を入力する。: 54
探索値:54 は0から数えて 8 番目にあります。

$ ./binary-search.py
[11, 13, 24, 26, 35, 37, 46, 49, 54, 68]
探索値を入力する。: 55
探索値:55 は見つかりませんでした。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 線形探索法(linear search:リニアサーチ)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/linear-search/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 10:18:34 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1528</guid>

					<description><![CDATA[線形探索法(リニアサーチ)について 線形探索法は、データ列の先頭から順番に調べて目的の要素を探すアルゴリズムです。 探索のイメージが一直線(linear)に探していく様子からリニアサーチと呼ばれています。 単純でわかりや [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">線形探索法(リニアサーチ)について</h2>



<p>線形探索法は、データ列の先頭から順番に調べて目的の要素を探すアルゴリズムです。</p>



<p>探索のイメージが一直線(linear)に探していく様子からリニアサーチと呼ばれています。</p>



<p>単純でわかりやすいアルゴリズムですが、探索の効率はよくありません。データ数が多くなればなるほど、後方部分の探索に時間がかかります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">線形探索法のイメージ</h2>



<p>以下の図は線形探索法を使って探索値を探し出す様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[線形探索法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="861" height="583" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法.png" alt="線形探索法(リニアサーチ)のイメージ" class="wp-image-1532" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法.png 861w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法-300x203.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法-768x520.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法-160x107.png 160w" sizes="(max-width: 861px) 100vw, 861px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">サンプルコード</h2>



<p>線形探索法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Tcl</h3>



<p>[サンプル：linear-search.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 線形探索法(linear search:リニアサーチ)

#  arr   : 数値リスト
#   n    : 要素数
#   i    : 探索する要素の位置
# target : 探索値

array set arr {0 40 1 10 2 30 3 50 4 20}
set n [array size arr]

parray arr

puts -nonewline "探索値を入力する。: "
flush stdout

set target [gets stdin]

set i 0

while {$i &lt; $n} {
    if {$arr($i) == $target} {
        puts "探索値: $target は0から数えて $i 番目にあります。"
        exit
    }
    incr i
}

puts "探索値: $target は見つかりませんでした。"
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./linear-search.tcl
arr(0) = 40
arr(1) = 10
arr(2) = 30
arr(3) = 50
arr(4) = 20
探索値を入力する。: 50
探索値: 50 は0から数えて 3 番目にあります。

$ ./linear-search.tcl
arr(0) = 40
arr(1) = 10
arr(2) = 30
arr(3) = 50
arr(4) = 20
探索値を入力する。: 80
探索値: 80 は見つかりませんでした。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Python</h3>



<p>[サンプル：linear-search.py]</p>



<pre class="python">#!/usr/bin/env python3

import sys

# 線形探索法(linear search:リニアサーチ)

#  arr   : 数値リスト
#   n    : 要素数
#   i    : 探索する要素の位置
# target : 探索値

arr = [40, 10, 30, 50, 20]
n = len(arr)

print(arr)

# 探索する値を入力
target = input('探索値を入力する。: ')
target = int(target)    # 文字列から数値に変換

# 探索する(リニアサーチ)
i = 0

while i &lt; n:
    if arr[i] == target:
        print(f'探索値: {target} は0から数えて {i} 番目にあります。')
        sys.exit()

    i += 1

print(f'探索値: {target} は見つかりませんでした。')
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./linear-search.py
[40, 10, 30, 50, 20]
探索値を入力する。: 50
探索値: 50 は0から数えて 3 番目にあります。

$ ./linear-search.py
[40, 10, 30, 50, 20]
探索値を入力する。: 80
探索値: 80 は見つかりませんでした。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 単純挿入法(insertion sort:挿入ソート)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/insertion-sort/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 10:14:12 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1522</guid>

					<description><![CDATA[単純挿入法(挿入ソート)について 単純挿入法は、未整列のデータの中から要素を順番に取り出して、整列済みのデータ列の適切な位置に挿入していくことで整列を行うアルゴリズムです。 挿入ソートの平均的な実行速度はバブルソートと大 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">単純挿入法(挿入ソート)について</h2>



<p>単純挿入法は、未整列のデータの中から要素を順番に取り出して、整列済みのデータ列の適切な位置に挿入していくことで整列を行うアルゴリズムです。</p>



<p>挿入ソートの平均的な実行速度はバブルソートと大差はありませんが、ソートを行う前のデータが昇順や降順にある程度並んでいる場合には、高速な処理が期待できます。</p>



<p>挿入ソートは整列済みのデータに、新しい要素を追加して再び整列を行う場合などに使用します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">単純挿入法のイメージ</h2>



<p>以下の図は単純挿入法を使ってデータを小さい順(昇順)に並べ替える様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[単純挿入法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="865" height="587" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法.png" alt="単純挿入法(insertion sort:挿入ソート)のイメージ。" class="wp-image-1525" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法.png 865w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法-300x204.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法-768x521.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法-120x80.png 120w" sizes="(max-width: 865px) 100vw, 865px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">サンプルコード</h2>



<p> 単純挿入法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Tcl</h3>



<p>[サンプル：insertion-sort.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 単純挿入法(insertion sort:挿入ソート)

#  arr  : 数値リスト
#   n   : 要素数
#   i   : 未整列データの先頭の位置
#  tmp  : 挿入する要素の値
# blank : 空き要素の位置

array set arr {0 40 1 10 2 30 3 50 4 20}
set n [array size arr]

set i 1    ;# 0番目は暫定で整列済みとするので1で初期化する。

while {$i &lt; $n} {
    set tmp $arr($i)
    set blank $i

    # 右にシフトさせる。
    while {$blank &gt; 0 &amp;&amp; $arr([expr $blank -1]) &gt; $tmp} {
        set arr($blank) $arr([expr $blank -1])
        incr blank -1
    }
    # シフト後の空スペースに要素を挿入する。
    set arr($blank) $tmp

    incr i
}
parray arr
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./insertion-sort.tcl
arr(0) = 10
arr(1) = 20
arr(2) = 30
arr(3) = 40
arr(4) = 50
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[補足説明]</p>



<p>右にシフトせさるところは、</p>



<ul class="wp-block-list"><li>blank(空き要素の位置)がゼロより大きい かつ</li><li>arr[blank-1] &gt; tmp の関係が続く間</li></ul>



<p>arr[blank-1]の要素を右にシフトします。</p>



<p>イメージ図でいうところの整列済み(水色)の要素値をarr[blank-1] &gt; tmpの関係が続く間、右に１つずつ移動させます。</p>



<p>イメージ図の４回目の部分を見て頂くとイメージしやすいと思います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Python</h3>



<p>[サンプル：insertion-sort.py]</p>



<pre class="python">#!/usr/bin/env python3

# 単純挿入法(insertion sort:挿入ソート)

#  arr  : 数値リスト
#   n   : 要素数
#   i   : 未整列データの先頭の位置
#  tmp  : 挿入する要素の値
# blank : 空き要素の位置

arr = [40, 10, 30, 50, 20]
n = len(arr)

print(arr)

i = 1           # 0番目は暫定で整列済みとするので1で初期化する。

while i &lt; n:
    tmp = arr[i]
    blank = i

    # 右にシフトする。
    while blank &gt; 0 and arr[blank-1] &gt; tmp:
        arr[blank] = arr[blank-1]
        blank = blank-1

    # シフト後の空スペースに要素を挿入する。
    arr[blank] = tmp

    i += 1

print(arr)

</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./insertion-sort.py
[40, 10, 30, 50, 20]
[10, 20, 30, 40, 50]
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[補足説明]</p>



<p>右にシフトせさるところは、</p>



<ul class="wp-block-list"><li>blank(空き要素の位置)がゼロより大きい かつ</li><li>arr[blank-1] &gt; tmp の関係が続く間</li></ul>



<p>arr[blank-1]の要素を右にシフトします。</p>



<p>イメージ図でいうところの整列済み(水色)の要素値をarr[blank-1] &gt; tmpの関係が続く間、右に１つずつ移動させます。</p>



<p>イメージ図の４回目の部分を見て頂くとイメージしやすいと思います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 単純選択法(selection sort:選択ソート)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/selection-sort/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 10:07:23 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1509</guid>

					<description><![CDATA[単純選択法(選択ソート)について 単純選択法は、以下のような手順で並べ替えていくアルゴリズムです。 データ列の中から一番小さい値を選択し、それを0番目の要素と交換する。 次に、残りのデータ列の中から一番小さい値を選択し、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">単純選択法(選択ソート)について</h2>



<p>単純選択法は、以下のような手順で並べ替えていくアルゴリズムです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>データ列の中から一番小さい値を選択し、それを0番目の要素と交換する。<br> 次に、残りのデータ列の中から一番小さい値を選択し、それを1番目の要素と交換する。 <br> これをデータの最後まで繰り返し行う事により、先頭から順に並べ替えていきます。 </p>



<p>一番小さい値を選択しながら整列していくので、単純選択法は選択ソート(selection sort)と呼ばれています。</p>



<p>選択ソートはバブルソートと比較回数は同じですが、各ループでの交換回数が最大１回となっているので選択ソートの方が高速です。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">単純選択法のイメージ</h2>



<p>以下の図は単純選択法を使ってデータを小さい順(昇順)に並べ替える様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[単純選択法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="865" height="585" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法.png" alt="" class="wp-image-1510" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法.png 865w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法-300x203.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法-768x519.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法-160x107.png 160w" sizes="(max-width: 865px) 100vw, 865px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">サンプルコード</h2>



<p>単純選択法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Tcl</h3>



<p>[サンプル：selection-sort.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 単純選択法(selection sort:選択ソート)

#      arr : 数値リスト
#        n : 要素数
#      i,j : 要素のindex
#      tmp : 交換用
# indexMin : 最小値の位置

array set arr {0 40 1 10 2 30 3 50 4 20}
set n [array size arr]

set i 0    ;# 外側のループカウンタ。

while {$i &lt; $n - 1} {

    set indexMin $i        ;# i番目を暫定で最小値とする。
    set j [expr $i + 1]    ;# 内側のループカウンタ。

    # 最小値の位置を探す。
    # このループでindexMinには未整列中の最小値の位置がセットされる。
    while {$j &lt; $n} {
        if {$arr($j) &lt; $arr($indexMin)} {
            set indexMin $j
        }
        incr j
    }

    # 最小値とi番目の値を交換する。
    set tmp $arr($i)
    set arr($i) $arr($indexMin)
    set arr($indexMin) $tmp

    incr i
}
parray arr
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./selection-sort.tcl
arr(0) = 10
arr(1) = 20
arr(2) = 30
arr(3) = 40
arr(4) = 50
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Python</h3>



<p>[サンプル：selection-sort.py]</p>



<pre class="python">#!/usr/bin/env python3

# 単純選択法(selection sort:選択ソート)

#      arr : 数値リスト
#        n : 要素数
#      i,j : 要素のindex
#      tmp : 交換用
# indexMin : 最小値の位置

arr = [40, 10, 30, 50, 20]
print(arr)

n = len(arr)    # 要素数
i = 0           # 外側のループカウンタ。

while i &lt; n-1:
    indexMin = i    # i番目を暫定で最小値とする。
    j = i+1         # 内側のループカウンタ。

    # 最小値の位置を探す。
    # このループでindexMinには未整列中の最小値の位置がセットされる。
    while j &lt; n:
        if arr[j] &lt; arr[indexMin]:
            indexMin = j

        j += 1

    # 最小値とi番目の値を交換する。
    tmp = arr[i]
    arr[i] = arr[indexMin]
    arr[indexMin] = tmp

    i += 1

print(arr)
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./selection-sort.py
[40, 10, 30, 50, 20]
[10, 20, 30, 40, 50]
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 単純交換法(bubble sort:バブルソート)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/bubble-sort/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 09:57:54 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1502</guid>

					<description><![CDATA[単純交換法(バブルソート)について 単純交換法は、隣り合ったデータの大小を比較して交換するという作業を繰り返して行い、最終的にデータを昇順または降順に並べ替えるアルゴリズムです。 このアルゴリズムは、並べ替える様子が、水 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">単純交換法(バブルソート)について</h2>



<p>単純交換法は、隣り合ったデータの大小を比較して交換するという作業を繰り返して行い、最終的にデータを昇順または降順に並べ替えるアルゴリズムです。</p>



<p>このアルゴリズムは、並べ替える様子が、水中から水面へ浮かび上がっていく泡のように見えることから、バブルソート(bubble sort)と呼ばれています。</p>



<p>バブルソートの説明を先頭の要素から順番に比較する方法で説明しているサイトや本がありますが、泡のイメージを出す為に水の底(末尾)から水面(先頭)に向かって順番に比較する方法で説明します。</p>



<p>小さい数字を上へ持ち上げていくイメージです。</p>



<p>どちらの方法も考え方は同じですが、末尾の要素から先頭の要素に向かって順番に比較していく方法を説明しているものが多いように思います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">単純交換法のイメージ</h2>



<p>以下の図は単純交換法を使ってデータを小さい順(昇順)に並べ替える様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[単純交換法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="869" height="584" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法.png" alt="単純交換法(bubble sort:バブルソート)のイメージ" class="wp-image-1505" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法.png 869w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法-300x202.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法-768x516.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法-160x107.png 160w" sizes="(max-width: 869px) 100vw, 869px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">サンプルコード</h2>



<p>単純交換法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Tcl</h3>



<p>[サンプル：bubble-sort.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 単純交換法(bubble sort:バブルソート)

# arr : 数値リスト
#  n  : 要素数
#  i  : 要素のindex
# tmp : 交換用
# last: 確定した最小値を入れる位置

array set arr {0 40 1 10 2 30 3 50 4 20}
set n [array size arr]

set last 0

while {$last &lt; $n - 1} {
    set i [expr $n - 1]
    while {$i &gt; $last} {

         # 隣り合ったデータの大小を比較して交換する。
        if {$arr([expr $i -1]) &gt; $arr($i)} {
            set tmp $arr([expr $i -1])
            set arr([expr $i -1]) $arr($i)
            set arr($i) $tmp
        }
        incr i -1
    }
    incr last
}
parray arr
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./bubble-sort.tcl
arr(0) = 10
arr(1) = 20
arr(2) = 30
arr(3) = 40
arr(4) = 50
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Python</h3>



<p>[サンプル：bubble-sort.py]</p>



<pre class="python">#!/usr/bin/env python3

# 単純交換法(bubble sort:バブルソート)

# arr : 数値リスト
#  n  : 要素数
#  i  : 要素のindex
# tmp : 交換用
# last: 確定した最小値を入れる位置

arr = [40, 10, 30, 50, 20]
n = len(arr)

print(arr)

last = 0

while last &lt; n-1:
    i = n-1
    while i &gt; last:

        # 隣り合ったデータの大小を比較して交換する。
        if arr[i-1] &gt; arr[i]:
            tmp = arr[i-1]
            arr[i-1] = arr[i]
            arr[i] = tmp

        i -= 1

    last += 1

print(arr)
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./bubble-sort.py
[40, 10, 30, 50, 20]
[10, 20, 30, 40, 50]
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
